* trying to make my global keymap
* refactoring the old keymap using userspace
* getting there
* move readme and remove community layout
* use pragma once instead of ifndefs
* just make iris work
* iris decent
* better naming
* add some modifiers on the home row
* use symbol and sysctl layers
* fix up
* a bit faster
* add < and > on symbol layer
* apparently im not using z all that much..
* okok
* fix up stuff
* led init is back
* bring back led indicators
* Update keyboards/ergotravel/keymaps/pvinis/config.h
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* not needed
* not needed
* delete these for now, until I use the userspace code
* remove katamari from here. made a new pr for it
* lower case
* drashna suggestion :)
* move files to correct place
* fix missing command
* First publish of roguepullreqest programmer dvorak planck layout
* Removed junk line
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Removed layer songs
Removed layer songs for cleanliness. Will use them later.
* Update keyboards/planck/keymaps/roguepullrequest/readme.md
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Made basic LSHIFT framework but is not working. Listed other tapdances.
* Got LSHIFT to work
* Added working RSHIFT
* Added working TD_S
* Cleaned up LEFT and RIGHT [ { ] } on the UPPER layer.
* Cleaned up layout.
* Reenabled audio space is not needed right now.
* Added tap dances and layout image
* Started dactylmanuform layout
* Revert "Started dactylmanuform layout"
This reverts commit 5ef48e4a23.
* Started mousepad version of BDN9...wont compile for some reason.
* Fixed BDN9 mousepad layout
* Added readme.md to mousepad bdn9 layout.
* Updated readme.md for mousepad bdn9 layout.
Fixed the tables to finally work.
* Unslashed the mousepad keymap for the BDN9
* remove not need file
* set RGBLIGHT_SPLIT
* set RGBLIGHT by layer
* exchange LED color on layer
* Update keyboards/hecomi/alpha/rules.mk
I misunderstand RGBLIGHT_SPLIT
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Fix LAYOUT_60_iso_split_space_bs_rshift to match comments and Configurator
* Fix LAYOUT_60_iso_split_space_bs_rshift to match comments and Configurator
* Initial Zygomorph 5x6 code
Split is not working yet
* layout changes
implement 4 row config option (not done yet), remove layout comments in layout.c
* Zygomorph layouts for 5x12, 5x6, 4x12, and 4x6
Also, info.json *should* be nearly usable
for the configurator
* temporary fix for pin D5 being broken
* show D5 issue comment
* add build notes
* Pin B7 broken in split why?
* remove fix
* Fix some pin assignments
* begin to fix keymap
* Create new 5x6 layout
* update key positions
* Initial Zygomorph 5x6 code
Split is not working yet
* layout changes
implement 4 row config option (not done yet), remove layout comments in layout.c
* Zygomorph layouts for 5x12, 5x6, 4x12, and 4x6
Also, info.json *should* be nearly usable
for the configurator
* temporary fix for pin D5 being broken
* show D5 issue comment
* add build notes
* Pin B7 broken in split why?
* remove fix
* Fix some pin assignments
* begin to fix keymap
* Create new 5x6 layout
* Rough first pass at split common conversion.
Keymap cleanup to cover just the basics.
Broke OLED code out into separate example.
* Fix readme
* Removal of old encoder / oled driver, fix for layout macros
* small update
* xulkal zygomorph keymaps
* Removed the LED_MIRRORED option as leds are always mirrored on Zygomorph
* Xulkal keymaps update
* split rgb light support
* fix line endings
* Apply suggestions from code review
Co-Authored-By: zvecr <git@zvecr.com>
* More layout and compile fixes from pr review
* Cleaning up rules.mk files
* Apply suggestions from code review
Co-Authored-By: zvecr <git@zvecr.com>
* Updating defaults
* Apply suggestions from code review
Co-Authored-By: noroadsleft <18669334+noroadsleft@users.noreply.github.com>
* Added check for pressed to clear space cadet
* Found some docs to update
* Update docs/quantum_keycodes.md
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Changes from PR
* Fix white space on z150_blackheart.h
* Update z150_blackheart.h to use #pragma once include guard
* Update z150_blackheart.h to use QMK-preferred K<row><col> notation
* Add QMK Configurator support
* Refactor the keymaps
- refactor the keymaps into separate files for each layout macro
- give credit where credit is due
- white space update (four-space indent)
* Make Hardware Availability link in readme a rich text link
* Convert LED indicators to GPIO commands
* Elevate Indicator LED set-up and toggling to keyboard level
* project creation and config.h import
* fix name
* cleanup
* layout for left
* working left with feather pins
* full keymap
* ?
* let's do this
* non working twimaster version
* it fucking works!
* bluetooth!
* cleanup
* use auto output for ADAFRUIT_BLE
* remove auto from custom matrix
* better ble auto
* fix f1
* revert
* fix ble
* update readme
* Update readme.md
* Update readme.md
* translate newbs.md into Madarin Chinese
translate newbs.md into Madarin Chinese
* translate docs into Mandarin Chinese
translate getting_started_github.md into Mandarin Chinese
* translate getting_started_getting_help.md into Mandarin Chinese
translate getting_started_getting_help.md into Mandarin Chinese
* contributing.md to Chinese
Personify QMK as a girl named Q酱 . It can make more developer read this document and contribute QMK.
* getting_started_introduction.md to Chinese
getting_started_introduction.md to Chinese
* faq.md to Chinese
faq.md to Chinese
* crlf2lf getting_started_introduction.md
ending line fix getting_started_introduction.md
* crlf2lf contributing.md
crlf2lf contributing.md
* clean up rgb matrix extern usage
Moved rgb matrix boiler plate into macros
Rebased onto typing heatmap pr
* Fixing the reversed frame buffer access in digital rain
* Fixing digital rain & typing heatmap if keyreactive effects are not enabled
* Apply suggestions from code review
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* Adding parenthesizes to DRIVER_LED_TOTAL where necessary
* Updated docs
* added notes about parentheses
* Improve Animation docs with example
- example to reduce flash footprint of animations using RGBLIGHT_EFFECT_ defines
* Re-order the effects list
* Update docs/feature_rgblight.md
Co-Authored-By: yanfali <yanfali@gmail.com>
* Update docs/feature_rgblight.md
Co-Authored-By: yanfali <yanfali@gmail.com>
* Update docs/feature_rgblight.md
Co-Authored-By: yanfali <yanfali@gmail.com>
* Introduce line breaks
* Add title for animation speed section
* Organize Animation Defines Into Groups
* Use the RGB EFFECT recommended by mtei in docs
- has the most modes, and STATIC_LIGHT can't really be disabled.
* Use more accurate titles for effects and animation
- accidentally put a toggle in settings
* Norman layout with Lower and Raise layers working
* Add keymap_extra def for Norman layout
* Re-org'ed the modifiers as explained in the Readme
* Corrected colour legend for KLE that the Readme links to
* Use #pragma once in header file
* Use pragma once and move user config to config.h
* Move definitions to the right file and correct link in Readme
* Move def of NM_COLN to the logical place in header file
* Add sendstring_norman.h for when the laptop layout is not QWERTY
* Update quantum/keymap_extras/sendstring_norman.h
Co-Authored-By: lehoff <torben.lehoff@gmail.com>
* initial commit and script error fixes
* add matrix and pin definitions along with LAYOUT macro
* add an appropriate keymap
* add num lock led support
* turn on bootmagic lite along with backlight led support
* add QMK Configurator support
* initial commit
* fix script issues
* define pins used and electrical matrix size and an appropriate LAYOUT macro
* add an appropriate keymap
* turn on bootmagic lite and backlight support
* Add QMK Configurator support
* add caps lock led support
* update readme with group buy links
* initial commit
* fixup script issues
* define pins used and create an appropriate LAYOUT macro
* create an appropriate keymap
* turn on backlight and bootmagic lite
* add QMK Configurator support
* fixup readme
* remove doubly defined KC_TRNS from keymap
* add support for Caps lock and Scroll lock LEDs
* Initial conversion of the rgb_led struct
* Converting last keyboard & updating effects to take advantage of the new structure
* New struct should not be const
* Updated docs
* Changing define ___ for no led to NO_LED
* Missed converting some keymap usages of the old struct layout
slave backlight was always on - as get_backlight_level() doesn't
indicate if the backlight is enabled or not.
also updated the corosponding code for serial transport to stop peeking
directly at 'internal' backlight_config structure.
* Disable a bunch of reactive modes
* Enable rgb matrix for Corne Keyboard
* Convert CRKBD to rgb matrix
* Add Gergo keyboard layout
* Make Diablo 3 tap dance better
* Add basic support for Planck EZ
* Fix RGB Matrix stuff
* Fix keycodes for Planck EZ
* Update CRKBD OLED stuff
* Fix typo for sleep on ergodox glow
* Improve my gergo layout
* Scrolling OLED key logger!
* Change gergo layout
* Hnadle unicode keycodes if unicode is disabled
* Disable COMMAND/CONSOLE for gergo
* Fix right side control
* Re-enable LTO for all platforms
Since I got updated arm gcc binaries that no longer error out on lto
* Update formatting to match newer community standards
Poor 2 space
* Re-alight startup animation to use new HUE range
* Streamline gitlab ci scripts
* Disabled Space Cadet
* Add support for breathing table
* Enable new LTO Option
And clean up defines that will now be repeatitive
* Remove vscode settings
* Additional formatting cleanup of config.h files
* Add FnLk to Melody96 bottom row
* Update conditional in userspace makefile
Thanks @drashna
* Add F keys to Melody96 Fn layer
* Add FN_ESC alias to userspace
* Update KBD6X keymap
* Fix RGB_MATRIX_ENABLE constant name in #if
* Remove trailing \ from LAYOUT macro calls
* Set RGB mode on EEPROM reset in KBD6X
* Swap right and middle mouse buttons in KBD6X
* Rearrange RGB controls in KBD6X
* Update keycode aliases, replace CLEAR with DEL_NXT in KBD6X
Add Clear to KBD6X as RCtrl+`
* Convert code to 4 space indents
* Tweak RCTRL layer functionality
* Replace NUMPAD custom keycode with layer state logic
* Update RGB_MATRIX_ENABLE check
Co-Authored-By: vomindoraan <vomindoraan@gmail.com>
* Re-fix Mousekey Movements
After the new movement model was instroduced, it broke diagonal momement, again. Reapplying fix from #3147 to both old and new acceleration method.
* Make diagonal mouse report checks more readable
Co-Authored-By: drashna <drashna@live.com>
* added personal CTRL keymap
* added personal dz60rgb keymap
* enabled new rgb effect
* added space cadet shift
* media player track buttons now orange
* updated keymaps with rgb setting and visual HSV setting preview
* fixed source stuff?
* added support for underglow toggle (bugged to all hell)
* everything now behaves as expected when ti comes to RGB toggles, thank god
* removed ifdefs
* changed color of MAS_CRM
* uh, whitespace
* fixed issue with LED indicators
corrected error in info.json
* fixed issue with led indictors
* added fix for key_count to info.json for westfoxtrot/aanzee
* fix to support config.qmk.fm correctly and remove unused key from matrix for westfoxtrot/aanzee
The code as originally listed didn't work for me, but replacing `unregister_code16(LALT(KC_TAB));` with `unregister_code(KC_LALT);` fixes the problem and causes the macro to work as intended.
Thanks to folks on Discord for helping me figure this out.
* docker_build.sh: Docker requires access to hosts devices
This also runs the container interactively which allows the user to
interupt the build with Ctrl-C.
* docker_build.sh: Mount /dev via $usb_args instead
* remove files that contributed to default hex file creation
* fix up rgb pcb rules and config that previously depended on rules and config in a parent directory
* use #pragma once
* turn on backlight breathing and use #pragma once
* fix config.h and rules.mk to not depend on the parent directory
* use #pragma once
* removed keyboard info.jsons in favor of a shared one
* add in hhkb layout and shared info.json file
* fixup readme file
* remove cruft
* use bootmagic lite over yes
* fix config path and use pragma once
* commit PR fixes
* update manufacturer
* set bootloader correctly
* Expose unicode_saved_mods
* Add UNICODEMAP shift pair functionality and XS keycode
* Add XS to keycode reference documentation
* Pick pair index based on both Shift and Caps Lock state
* Add XS to Unicode feature docs
* Clean up process_unicode* headers
* Extract unicode_map index calculation into function
* Pick pair index as XOR rather than OR of Shift and Caps states
* unicode_input_start() has to be called before the unicode_map index is calculated
* Replace unicodemap_input_error() with more generic unicode_input_cancel()
* Replace register+tap+unregister with tap_code16(LCTL(LSFT(KC_U)))
* UNICODE_OSX_KEY → UNICODE_KEY_OSX, UNICODE_WINC_KEY → UNICODE_KEY_WINC
* Make keycode range checks more robust
* Fix keycode range checks for different input modes
* Add UNICODE_KEY_LNX, update docs
* QK_UNICODEMAP_SHIFT → QK_UNICODEMAP_PAIR
* XS → XP, update docs
* Tweak Unicode docs
* Use recently added MOD_MASK_SHIFT and IS_HOST_LED_ON helpers
* Update Unicode table in docs/keycodes.md
* Update Unicode docs per review comments
* Replace references to Mac OS X with macOS in Unicode docs
* As of v0.9.0, WinCompose supports all possible code points
* Expand descriptions in XP docs
* Update keycode table and cycling docs
* Further expand cycling docs
* Add DFU Suffix for ARM boards
* Blindly flash DFU SUFFIX ARGS for now
* Fix commented out check
* Fix DFU Suffix Argument check
Thank you jack!
* Update Travis CI Scripts to include dfu-util
So we can get dfu-suffix as well
* Manually add dfu-suffix package
* Use external repo for newer version of dfu-util
One that includes dfu-suffix
* Update .travis.yml
* Silence unnecessary output from dfu-suffix
The insertion point for `$(patsubst %.c,%.clib,$(LIB_SRC))` must be after all normal `SRC += ..` . I modified it to be so.
Because LIB_SRC and SRC are assumed to be used in pairs. Similarly, QUANTUM_LIB_SRC and QUANTUM_SRC are assumed to be used in pairs.
translate
newbs_getting_started.md
newbs_building_firmware.md
newbs_flashing.md
newbs_testing_debugging.md
newbs_best_practices.md
newbs_learn_more_resources.md
into Mandarin Chinese
Specifically, to fix some edge cases, and keep the handling consistent, the userspace folder should not actually be added at the end. Ideally, it should be added after the keymap paths, but before the keyboard's path.
This issue was discovered in #5484, and the fix created by mtei.
* If RGBLIGHT_EFFECT_BREATHE_CENTER is undefined, use fixed breathe table instead of exp() and sin()
* Change rgblight breathing table size to be easily selectable.
add RGBLIGHT_BREATHE_TABLE_SIZE macro for customize breathing effect.
* Add compatibility for LAYOUTS = planck_mit planck_grid
* Add compatibility for LAYOUTS = ortho_4x12
* Remove planck_grid community support from Plaid
* First publish of roguepullreqest programmer dvorak planck layout
* Removed junk line
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Removed layer songs
Removed layer songs for cleanliness. Will use them later.
* Update keyboards/planck/keymaps/roguepullrequest/readme.md
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Made basic LSHIFT framework but is not working. Listed other tapdances.
* Got LSHIFT to work
* Added working RSHIFT
* Added working TD_S
* Cleaned up LEFT and RIGHT [ { ] } on the UPPER layer.
* Cleaned up layout.
* Reenabled audio space is not needed right now.
* Added tap dances and layout image
* Started dactylmanuform layout
* Revert "Started dactylmanuform layout"
This reverts commit 5ef48e4a23.
* Adjusted the linear led table and hsv_to_rgb to better handle 255 hue
* small math adjustments to better handle specific uint8_t rounding and overflows
* Remove dependency on sortedcontainers
* Sort dictionary on output
* Externalize writing of keymap.c into function
- serialize layers into one flat list
* Add encoding
* Generate JSON keymap in addition to keymap.c
* Replace XXXXXX with KC_NO
* Added support for BM16S keyboard.
* Update keyboards/bm16s/bm16s.h
Co-Authored-By: bontakun <ben@bontakun.net>
* Update keyboards/bm16s/bm16s.h
Co-Authored-By: bontakun <ben@bontakun.net>
* Cleaned up a bunch of unneeded stuff.
* Made layout name match.
* Changed rules file to have correct bootloader and indention. Updated readme to reflect availability on krepublic. Updated keymap to have more obvious RGB controls.
* Removed unnecessary file.
* Fixed grammar in readme.
Co-Authored-By: bontakun <ben@bontakun.net>
* Migrated to autogenerated layout config, without issue.
* Renamed LAYOUT to match community standards.
* Move lib8tion header-defined constant into implementation file, add to build
* Move b_m16_interleave initializtion to lib8tion.c, change build to include lib8tion.c in QUANTUM_LIB_SRC
* Remove left-over whitespace
* Move lib8tion include by RGB_MATRIX_ENABLE code in makefile
* Revert build changes and change lib8tion b_m16_interleave constant to static
* Adding ortho_4x12 & planck_mit layouts for KBD4X.
* Adding LAYOUT_kc_ortho_4x12 macro to KBD4x.
* Turn off console for KBD4X so firmware size falls within limit.
* Revamped custom effects approach
See docs for example usage
* push-up RGB Matrix default mode
Override default effect using RGB_MATRIX_STARTUP_MODE.
Useful on boards without EEPROM support
(*cough* Massdrop ALT/CTRL *cough*)
* update docs
* Planck: Copy contents of Planck rules.mk to each revision
* Planck: Delete Planck rules.mk
* Planck: Concatenate duplicate rules
Concatenate rules that are set and then overridden into one setting.
* Preonic: Copy contents of Preonic rules.mk to each revision
* Preonic: Delete Preonic rules.mk
* Preonic: Concatenate duplicate rules
Concatenate rules that are set and then overridden into one setting.
* Planck: Delete non-specific Bootloader settings from revs. 1 and 2
Deleted BOOTLOADER setting code block, as the checks were only valid for revs. 3-5 and the Planck Light.
Neither Planck rev1 or rev2 set the bootloader via rules.mk, so there's no setting of BOOTLOADER in their rules.mk files.
* Preonic: Fix BOOTLOADER settings code blocks
* Preonic: delete extra blank lines from rules.mk files
* Preonic: delete AVR-type hardware config blocks from rev3
* Update Planck and Preonic readme files
- update Hardware Supported
- update/add Install Examples
- update Docs paragraph
* Enable Bootmagic Lite where it is disabled
Enabled Bootmagic Lite for:
- Planck Light
- Planck revs. 1-5
- Preonic revs. 1 and 2
* Remove `planck_grid` from LAYOUTS rule for all Planck revisions
Community has landed on `ortho_4x12`, which is already set; `planck_grid` is redundant.
* Update code for compatibility with latest QMK
* Added compatibility with Planck rev6
* use wait_ms instead of _delay_ms
* removed unnecessary rules
* disable audio on rev4 only
* A better new_project.sh
* Fix docstrings
* Use single quotes for anything not shown to user
* Missed this docstring
* Simplify get_git_username()
Thanks @vomindoraan
* chmod +x
* Add docstring for print_error()
* Break up git username call into multiple lines
* Use with statement here
* Conform to PEP 8 even more
* Turn it back into a shell script
* chmod +x again
* Update docs to reflect new keyboard generator usage
* Tweak wording slightly
* Trim trailing whitespace
* Don't actually need to escape the newlines here
* As I suspected, you can pass shift a number
* Prepend ./ to match the other code block
* Minor syntax tweaks
* The username token has changed
* Replace name in the readme too
* Make some reasonable assumptions about the presence of Git
* Add initial keyboard layout for Quefrency
* Add RGB config and keybindings for Quefrency
* Move Quefrency wheel keys to more convenient place
* Actually switch from serial to I2C
Commit 64708c6 updated the comment, not the #define. D'oh!
* [Keyboard] Update Gergo to use newer Ergodox Matrix code
And update layout macros to be correct
* Almost forgot the json file
* Remove board specific defines for i2c timeout
* Start to standardize macro timer
* Update Fractal layout
Specifically, limit the RGB Lighting, since it's too many for the power, and only have the KITT annimation on the front
* Update Iris keymap to use I2C for transport
* Remove TAP_CODE_DELAY from keyboard in favor of global setting
* Remove Woodpad
Since it\'s no longer in my possession
* Only enable LTO on AVR boards
* Run matrix_scans while doing startup light
* Run matrix_scan to get split keyboard code synced properly
* Fix rgb mode
* Remove custom debouncing settings
* Make RGB Light Startup Animation optional
* Fix opt def
* Remove extra tap code delay value
* Fix references to keebio boards
* Add support for LP Iris keyboard
* Add backlight code
* Make startup animation optional
* Update gitlab ci script
* Remove port declaration
* Revert avrgcc changes to gitlab ci file
* Don't re-set mods
* Remove MACRO_TIMER define
* Add custom name for crkbd
* Add name for Prime M pad
* Add names for ortho 4x12 boards
* Add some additional handling for rgb init
* Change thumb clusters on ergodox
* Switch Orthodox to I2C
* Fix Space in ergodox keymap
* Use OSL for ergodox layout
* Ugh, can't find a good layout
* Fix typo
* Fix up animation startup
* Cries in AVR
* Fix makefiles for ergodox ez boards
* Add support for "secret songs" in my userspace
* Reset debounce to 5ms for Ergodox EZ
* Fix gitlab CI yaml file
* More crying in AVR
* Cannot use rgb light and rgb matrix at the same time due to the WS2812 rgb matrix PR until the "Coexistance" PR is merged
* Update ODox for split common and i2c
* Add split config
* Impement Split code
* Add support for xscorpion OLED code
* Add OLED display config
* Fix OLED screen font
* Get OLED set up in vertical mode
* Remove old OLED code
* add per key support for crkbd
* Fix split changes
* RGB Tweeaks
* More OLED tweaks
* Fix rotation stuff
* Fix more OLED stuff
* Remove custom Debounce from Ergodox layout since it's no longer needed
With my XD60, I noticed that when typing the backlight was flickering.
The XD60 doesn't have the backlight wired to a hardware PWM pin.
I assumed it was a timing issue in the matrix scan that made the PWM
lit the LED a bit too longer. I verified it because the more keys that
were pressed, the more lighting I observed.
This patch makes the software PWM be called during CPU interruptions.
It works almost like the hardware PWM, except instead of using
the CPU waveform generation, the CPU will fire interruption
when the LEDs need be turned on or off.
Using the same timer system as for hardware PWM, when the counter
will reach OCRxx (the current backlight level), an Output Compare
match interrupt will be fired and we'll turn the LEDs off.
When the counter reaches its maximum value, an overflow interrupt
will be triggered in which we turn the LEDs on.
This way we replicate the hardware backlight PWM duty cycle.
This gives a better time stability of the PWM computation than pure
software PWM, leading to a flicker free backlight.
Since this is reusing the hardware PWM code, software PWM also supports
backlight breathing.
Note that if timer1 is used for audio, backlight will use timer3, and if
timer3 is used for audio backlight will use timer1.
If both timers are used for audio, then this feature is disabled and we
revert to the matrix scan based PWM computation.
Signed-off-by: Brice Figureau <brice@daysofwonder.com>
* added info.json for ymd96
* fix layout for keymap_custom macrom, correct info.json for default layout
* add info layout for iso
* add info layout for iso
* align layout name, added maintainer username
* layout case fix
* layout case fix
* fix overlapping keys
* match layouts to keymaps.
* Define RGB colors
Define RGB colors and pass them to the rgblight functions, instead of
defining multiple macros.
* Add new color definitions support for RGB Matrix
* Add/clarify info about new color definitions in Docs
* Add deprecation warning banner to rgblight_list.h
* initial commit
* get rid of some of the vanilla code
* set up matrix and pins
* Create LAYOUT macro and an appropriate keymap
* support for caps lock LED
* add some documentation to the doro67 parent readme
* align the language used in the several readme files
* initial commit
* get rid of some of the vanilla code
* set up matrix and pins
* Create LAYOUT macro and an appropriate keymap
* support for caps lock LED
* add some documentation to the doro67 parent readme
* align the language used in the several readme files
* Use RGB Matrix and fix enter key bug
* fix formatting
* remove merge conflict artifacts
* make a more useful default keymap
* add configurator support for the RGB pcb
* fix rgb matrix based on new info. Multipler should be reversed
* forgot to actually set the pin output for caps lock led
* fix offset keys in layer 1 keymap
* code cleanup
* use macros for the rgb_led calculations struct
* set RGB led num to 67 as I mistakenly counted the caps lock led
* cleanup config.h file
* add RGB note in readme
* get consistent naming in config file
* fix some inconsistencies
* readjust matrix and get rid of macros based on drashna's suggestions
* add keymap
* fix readme title
* renamed README.md to lowercase, fix typo
* renamed README.md to lowercase, for real
* add double spaces for github
* lowercase name in readme
* rename directory to lowercase
* Make Signum 3.0 compatible with default ortho_4x12 layout
* Disable unicode map by default
* Add missing backspace key
* Add missing delete key
* Fix broken gui right command
* Move MO5 to a different key an add Esc to L4
* Move MO5 to a different key
* Add Del and Bspace to layer 4
* add I2C_slave_buffer_t to quantum/split_common/transport.c
Improvements to ease the maintenance of the I2C slave buffer layout. And this commit does not change the compilation results.
* add temporary pdhelix(Patched Helix) code
* temporary cherry-pick from #5020
add new version(#5020) quantum/rgblight.[ch], quantum/rgblight_modes.h
* add post_config.h support to build_keyboard.mk
* add quantum/rgblight_post_config.h, quantum/split_common/post_config.h
Add quantum/rgblight_post_config.h and quantum/split_common/post_config.h using POST_CONFIG_H variable of build_keyboard.mk.
quantum/rgblight_post_config.h additionally defines RGBLIGHT_SPLIT if RGBLED_SPIT is defined.
quantum/split_common/post_config.h defines RGBLIGHT_SPLIT additionally when master-slave communication is I2C.
* Change split_common's transport.c I2C to use the synchronization feature of rgblight.c
* Change split_common's transport.c serial to use the synchronization feature of rgblight.c
* test RGBLIGHT_SPLIT on keyboards/handwired/pdhelix
* Test End Revert "test RGBLIGHT_SPLIT on keyboards/handwired/pdhelix"
This reverts commit 80118a6bbd.
[x] make RGBLIGHT_TEST=1 handwired/pdhelix/i2c:default
[x] make RGBLIGHT_TEST=2 handwired/pdhelix/i2c:default (same RGBLIGHT_TEST=3)
[x] make RGBLIGHT_TEST=3 handwired/pdhelix/i2c:default
[x] make RGBLIGHT_TEST=1 handwired/pdhelix/pd2:default
[x] make RGBLIGHT_TEST=2 handwired/pdhelix/pd2:default
[x] make RGBLIGHT_TEST=3 handwired/pdhelix/pd2:default
[x] make RGBLIGHT_TEST=1 handwired/pdhelix/pd2_2oled:default
[x] make RGBLIGHT_TEST=2 handwired/pdhelix/pd2_2oled:default
[x] make RGBLIGHT_TEST=3 handwired/pdhelix/pd2_2oled:default
* Test End, Revert "temporary cherry-pick from #5020"
This reverts commit d35069f68b.
* Test End, Revert "add temporary pdhelix(Patched Helix) code"
This reverts commit aebddfc1a8.
* temporarily cherry-pick from #5020 to see if it passes the travis-ci test.
add new version(#5020) quantum/rgblight.[ch], quantum/rgblight_modes.h
* Passed the travis-ci test. Revert "temporarily cherry-pick from #5020 to see if it passes the travis-ci test."
This reverts commit 647c0a9755.
* update docs/config_options.md
* update split_common/transport.c, improves maintainability of serial transaction IDs.
No change in build result.
* temporary cherry-pick from #5020
* fix build fail keebio/iris/rev3:default
* fix build fail lets_split_eh/eh:default
* Revert "temporary cherry-pick from #5020"
This reverts commit be48ca1b45.
* temporary cherry-pick from #5020 (0.6.336)
* Revert "temporary cherry-pick from #5020 (0.6.336)"
This reverts commit 978d26a8b3.
* temporary cherry-pick from #5020 (0.6.336)
* add temporary file that is rgblight.c call graph
* add rgblight_update_hook()
* update rgblight-call-graph.dot (temporary file)
* add more hook point
* add TODO comment
* temporary Revert "add TODO comment"
This reverts commit df6165aac9.
* temporary Revert "add more hook point"
This reverts commit 64592b06f3.
* temporary Revert "add rgblight_update_hook()"
This reverts commit 432b74c912.
* add rgblight_update_hook()
* add more hook point
* add TODO comment
* implement rgblight_update_hook()
* remove rgblight_update_hook(), add RGBLIGHT_SPLIT_SET_CHANGE_XXXX
rgblight_update_hook() is too large.
change to simple flag setting.
* shrink rgblight_config_t
* implement rgblight_update_sync()
Note: The animation synchronization process has not been implemented yet.
* update quantum/rgblight-call-graph.dot (temporary file)
* rmove quantum/rgblight-call-graph.dot (temporary file)
* update rgblight.c
* Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c .
* fix build break rgblight_update_sync() when all animation off
* fix quantum/rgblight.c:rgblight_disable_XX() add RGBLIGHT_SPLIT_SET_CHANGE_MODE
* quantum/rgblight.c change code order: move rgblight_update_sync()
* add mode_base_table[] to quantum/rgblight.c
* quantum/rgblight.c use mode_base_table[] and rgblight_status.base_mode
* quantum/rgblkght.c animation timer integration
* quantum/rgblkght.c add animation sync for split keyboard
* fix mode_base_table[] and snake effect
* fix build break keyboards/mxss.
keyboards/mxss's local rgblight.c need old version rgblight.h
* rgblight.c: fix animation sync
* quantum/rgblight.c: fix snake effect sync
* quantum/rgblight.c: animation sync interverl 30 sec
* quantum/rgblight.c: fix rgblight_effect_rainbow_swirl() and rgblight_effect_knight()
* quantum/rgblight.c: add macro RGBLIGHT_SPLIT_ANIMATION
* cherry-pick from 'rgblight_modes.h sample implementation'
* fix RGBLIGHT_SPLIT_ANIMATION check position
* Update temporary code in Helix keyboard 'five_rows' keymap to test rgblight.c
* Reduce the firmware size by 1500 bytes when rgblight_effect_breathing() is enabled.
* Changed to rgblight_sethsv_eeprom_helper() for easier reading.
* add fail-safe code to quantum/rgblight.c:rgblight_task(),rgblight_timer_enable()
* remove temporary code in Helix keyboard 'five_rows' keymap
* quantum/rgblight.c: add split-keyboard master side sync functions
add functions:
uint8_t rgblight_get_change_flags(void);
void rgblight_clear_change_flags(void);
void rgblight_get_syncinfo(rgblight_syncinfo_t *syncinfo);
change function:
void rgblight_update_sync(rgblight_syncinfo_t *syncinfo, bool write_to_eeprom);
* Change rgblight_update_sync() to use write_to_eeprom.
* remove TODO comment from quantum/rgblight.h
* Revert "fix build break keyboards/mxss."
This reverts commit 90b9a1aa7d.
(Separated this change into the newly opened PR #5461.)
* Revert "Reduce the firmware size by 1500 bytes when rgblight_effect_breathing() is enabled."
This reverts commit b61004e63e.
* update quantum/rgblight.c: Code size reduction when not using RGBLIGHT_SPLIT.
* Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c .
* add temporary pdhelix(Patched Helix) code
* Add temporary code to split_common/transport.c to test rgblight.c.
* Finish testing rgblight.c with helix keyboard.
Revert "Add temporary code to Helix keyboard 'five_rows' keymap to test rgblight.c ."
This reverts commit 0bf81a4723.
* Finish testing rgblight.c with quantum/split_common code.
Revert "Add temporary code to split_common/transport.c to test rgblight.c."
This reverts commit 71db3e24ee.
* remove temporary pdhelix(Patched Helix) code
This reverts commit 5287e51a39.
* Added description of RGBLIGHT_SPLIT macro to docs/feature_rgblight.md.
* add RGBLIGHT_SPLIT_SET_CHANGE_HSVS to rgblight_init()
* Changed to restart animation only when changing mode.
When changing hue, sat and val, the animation is not restarted and continues.
Patch from https://github.com/qmk/qmk_firmware/issues/3657#issuecomment-415147411
Long story short, in avr-gcc pre-8.2, reset_key was assigned to a memory area that was in a normal range, but when 8.2 came out, that memory got moved to an out of range area, causing errors like 0x800293 out of range. Apparently, this was fixed up in avr-gcc, but we haven't seen a release with the fix yet (we expected it in 8.3, but that didn't happen for some reason).
What this commit does is move the reset_key back to the original memory location it was in before.
* Reduce CRKBD firmware size by reducing layer numbers
* Update layer output code based on mtei's suggestion/code
* Fix spacing
* Revert "Update layer output code based on mtei's suggestion/code"
This reverts commit 036d347db3.
Unfortunately, because this is NOT in the keymap itself, the layer macros aren't accessible and will error on commit
* Add comment for future person
When waking from suspend, only enable the LED drivers if they were not previously set to disabled by the user. This functionality was removed by the recent updates to adapt Massdrop keyboards to QMK RGB Matrix. Affects Massdrop CTRL and ALT keyboards compiled using Massdrop Configurator mode.
* First publish of roguepullreqest programmer dvorak planck layout
* Removed junk line
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Update keyboards/planck/keymaps/roguepullrequest/keymap.c
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Removed layer songs
Removed layer songs for cleanliness. Will use them later.
* Update keyboards/planck/keymaps/roguepullrequest/readme.md
Co-Authored-By: roguepullrequest <roguepullrequest@users.noreply.github.com>
* Made basic LSHIFT framework but is not working. Listed other tapdances.
* Got LSHIFT to work
* Added working RSHIFT
* Added working TD_S
* Cleaned up LEFT and RIGHT [ { ] } on the UPPER layer.
* Cleaned up layout.
* Reenabled audio space is not needed right now.
* Add files via upload
* kingwangwong
* kingwangwong
* revisions and adding atom40
* revisions for 5626
* revisions for 5626
* revisions for 5626.
* revisions for 5626, re added safe range
* revisions for 5626, added qmkkeyboard
* revisions for 5626, quefrency
Assuming I understand this correctly, this should set the max scancode to E7 (RGUI), which is the last listed code in the main list (everything else use for internal QMK/TMK stuff).
* Port DIRECT_PINS from split_common/matrix.c to matrix.c
* Reorder matrix.c to remove foward declaration and match split_common/matrix.c
* Refactor nano to use DIRECT_PINS
* Reorder matrix.c to remove foward declaration and match split_common/matrix.c
* Add DIRECT_PINS documentation
* Reorder matrix.c to remove foward declaration and match split_common/matrix.c - fix logic from inherited from split_common
* Add DIRECT_PINS documentation - review comments
* Revert "Update build instructions and Dockerfile to download submodules"
This reverts commit 93210547bd.
* Update build tools docs based on feedback
* Fix bad link in build tools docs
* RGB Matrix overhaul
Breakout of animations to separate files
Integration of optimized int based math lib
Overhaul of rgb_matrix.c and animations for performance
* Updating effect function api for future extensions
* Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary
* Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain
* Adds the Planck EZ, 3737 RGB, fixes out-of-tune notes
* fix bug in quantum/rgb_matrix_drivers.c
Co-Authored-By: jackhumbert <jack.humb@gmail.com>
* update command setting to the correct default
* correct rgb config
* remove commented-out lines
* update docs for the 3737
* Update docs/feature_rgb_matrix.md
Co-Authored-By: jackhumbert <jack.humb@gmail.com>
Since combos keep local state about what keys have been previously pressed, when combos are layered, multiple keypresses will register for any key with multiple combos assigned to it. In order to fix this, I switched process_combo to use a global keycode / keyrecord register and timer. When a keypress is consumed by a combo, it gets stored in the register and the timer is updated; when the next keypress takes too long or a key is pressed that isn't part of any combo, the buffer is emitted and the timer reset. This has a few side effects. For instance, I couldn't _not_ fix combo keys printing out of order while also fixing this bug, so combo keys print in order correctly when a combo fails. since combos no longer have local timers, the logic around when combos time out has changed. now that there is a single timer pressing any combo key (including one in a different combo) will reset the timer for all combos, making combo entry a little more lenient. Since combos no longer have local keycode / keyrecord state, there is an edge case where incomplete combo keys can be consumed. if you have a combo for a+s = tab and a combo for b+n = space, if you press a+b+n, only a space will be emitted. This is because when b+n completes successfully, it drops the register.
* Refactor 4x4 in line with current ps2avrgb template
* Add backlight pwm bodge till #4324 lands
* Disable bootmagic lite as it seems to not work on atmega32a/bootloadHID
* remove unneeded uart setting
* use pragma once everywhere
* remove custom matrix support
* fixup readme
* set bootmagic to lite
* remove dependency on custom i2c code
* use the right header files and function calls
* remove bootmagic support as it doesn't work on bmc boards
* readme merge artifacts removal
* pragma once it all
* put amnesia's name everywhere
* fixup readme
* remove custom matrix
* remove unneccessary configs
* disable bootmagic
* remove custom i2c in favor of i2c_master
* fix rgb led num
* add in rgb underglow support
* Refactor jj40 in line with current ps2avrgb template
* Disable bootmagic lite as it seems to not work on atmega32a/bootloadHID
* Add backlight pwm bodge till #4324 lands
* Increase planck keymap compatibility
* use pragma once
* modified readme with maintainer info
* remove rev1 for the time being
* QMK Configurator support for 60_ansi and 60_ansi_split_bs_rshift
* add hhkb layout and QMK Configurator support
* fix compile issue due to missing DEVICE_VER
* use a saner and less complicated default layout
* remove unused file
* fix up LAYOUT_all and formatting along with QKM Configurator support
* turn on bootmagic lite as the hardware reset switch isn't in a standard position
* remove default folder
* Added Waldo keyboard base files and default keymap
* Updated Waldo files and added keymap for split shift and split backspace
* Updated meta-data for the Waldo board
* Apply suggestions from code review
Committing suggestions for real this time.
Co-Authored-By: That-Canadian <Poole.Chris.11@gmail.com>
* Made suggested changes that were not explicitly made.
* Add keyboard Signum 3.0 for the elite-c
* Update readme.md
* Remove unused macros
* Use bootmagic lite instead of full
* Add warning to keymap.c that it's auto-generate
* Add description for customizing keyboard layouts
* Make generate_km.py executable
* Make right shift available in numpad layer
* Update keyboards/signum/3_0/elitec/readme.md
Co-Authored-By: jceb <jceb@e-jc.de>
* Update keyboards/signum/3_0/elitec/readme.md
Co-Authored-By: jceb <jceb@e-jc.de>
* Fix typo in symbol name
* remove dependency on custom i2c code
* missed a pragma once
* fix readme install instructions
* config.h cleanup
* make the bootmagic key not the same bmc reset key
* disable bootmagic functionality as it doesn't seem to work on atmega32a bmc boards
* remove custom i2c code in favor of QMK i2c_master
* clean up config file
* fix pyusb install instructions
* fix naming in usbconfig.h
* disable bootmagic as it does not work for bmc boards
* Update macros and keycode handling
- Update NUBS_Z macro so it repeats when held down
- Number row now uses numpad keycodes if Right Alt is being held
- coding conventions and formatting update
- switched to four-space indent
- reformatted a block comment
* Update readme files
* remove unneeded uart setting
* use pragma once everywhere
* remove custom matrix support
* fixup readme
* set bootmagic to lite
* remove dependency on custom i2c code
* use the right header files and function calls
* On i2c_init, enable two wire interface, twi interrupt, and slave
address ACK along with pull up resistors.
* thanks to some testing by drashna, we know that setting TWI doesn't work for all boards. Putting the new code into an ifdef block
* Add new keyboard: NQG
* Delete .gitignore
.gitignore removed
Originally used to ignore .DS_Store files from being committed.
* Changed Maintainer information
Maintainer link now points to a github account.
* Add customizable tapping terms
* Add Documentation
* Fix function
* Fixes
* It's not a pointer
* Add debugging output
* Update documentation to be at least vaguely accurate
* Use `get_tapping_term(tapping_key.event)` instead
`e` doesn't include column and row information, properly. It registers as 255, regardless of the actual keypress.
However `tapping_key.event` actually gives the correct column and row information. It appears be the correct structure to use.
In fact, it looks like the issue is that `e` is actually the "TICK" structure, as defined in keyboard.h
* Use variable tapping term value rather than define
* Silly drashna - tapping_key.event, not event
* add get_event_keycode() function
* Fix typo
Co-Authored-By: drashna <drashna@live.com>
* Remove post_process_record_quantum since it's the wrong PR
* Update quantum/quantum.c
Co-Authored-By: drashna <drashna@live.com>
* Better handle ifdef statement for permissive hold
Since we can't be sure that tapping term is actually 500
* Update quantum.c comments based on feedback
* Clean up get_tapping_term function
Clean up function so that users don't need to call the event function, and instead only check the keycode
* Add ability to run functionality on and off
* Make ifdef's more compact
* initial commit of budget96
* non logic changes
* add my name to readme
* update matrix.c
* make the matrix representation of the layout macro
* fix up LAYOUT macro
* add missing character
* initial keymap commit
* put KC_NO where they belong
* basic keymap
* fix matrix row and col definition
* The diagram I was sent and the pins used I was sent were in opposite order from each other. This should fix the issues
* update the readme
* change up manufacturer for budget96
* update copyright date
* fix up the switch matrix and provide a keymap
* forgot the keymap
* other matrix fixes
* missing a few keys in the switch matrix
* messed up the row tracing
* tweak keymap a bit
* use a lower case k
* fix spacing for markdown rendering
* put in the reset key documentation
* clean up the file a little
* use LAYOUT_96_ansi
* add a second layer for lighting controls
* add in lighting support
* add QMK Configurator support
* use pragma once
* remove un needed matrix.c
* convert to GPIO methods
* turn on rgblight_enable and get rid of custom matrix
* set bootloadhid_bootloader to 1
* set bootmagic to lite and set it to k50
* add reset information to readme
* use i2c_master instead of custom i2c
* restore the custom i2c code
* introduce reset key and eep_rst in function layer 1
* fix up pip3 install commands
* fix up device and manufacturer names
* remove un needed comments
* add an ALL layout macro along with QMK Configurator support
* move budget96 into donutcables directory since he actually has different boards
* add a short donut cables blurb taken from his website
* update readme for make instructions to point to the new path
* Update keyboards/donutcables/budget96/config.h
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update keyboards/donutcables/budget96/readme.md
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update keyboards/donutcables/budget96/info.json
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* turn on backlight
* Update keyboards/donutcables/budget96/readme.md
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* remove extra UART and BOOTLOADER settings that are not needed
* Added first configuration for handwired hacked motosped keyboard
* Added first keymap
* Fixed h file key layout
* Swapped Y and Z in default keymap
* Added name, email and description
* Moved hacked motospeed keyboard to handwired
* Changed make command in readme
* Formatted readme to be displayed properly with markdown
* Formatted keymap and layout to better reflect the physical keyboard
* Fixed info.json
* Update keyboards/handwired/hacked_motospeed/info.json
Co-Authored-By: Deckweiss <Deckweiss75@gmail.com>
* Removed .directory from .gitignore
Co-Authored-By: Deckweiss <Deckweiss75@gmail.com>
* Minor changes and cleanup
* Update keyboards/handwired/hacked_motospeed/hacked_motospeed.h
Added back newline needed for properly parsing
Co-Authored-By: Deckweiss <Deckweiss75@gmail.com>
* Adding new keymap folder for goadmaster
* add switch break
* zeal60 rgb backlight files
* modified for red caps lock key
* Remove return statement
* Files removed
* Add new RGB options
* Back to original file
* Keyboard: add treeadstone48
* rename layout defines
* Use of pragma once
* move common include code
* fixed info.json
* change keymap layout from kc to normal
* fix alpha revision keymap
* fixed info.json
* remove USE_Link_Time_Optimization
* Initial portover of the doro68.json with corrected column pins.
* Initial setup of LAYOUT_ansi and it's use in the default keymap.
* Added F keys to default kemap on layer 1.
* Added split space (and everything else) layout and a base keymap to be updated.
* Renamed split_space to multi.
* Changed product_id for doro.
* Created a basic doro LAYOUT_iso and default keymap.
* Copied over basic layout and keymap.
* Added readme.md for doro67 multi.
* Removed basic keyboad layout and keymap because it's a separate PCB.
* Added backlight controls to the various keymaps.
* Added explicit backlight pin define.
* Increased number of backlight levels for flexibility.
* Removed unnecessary line slashes and unified keymcaps.
* Corrected ISO layout and switched position with multi.
* Added keymap readme.md files.
* Corrected ISO keymap.
* Added Layouts to info.json for toolbox.
* Re-added slashes as they were necessary here...
* Corrected info.json/keymap discreptancies.
* Updated copyright messages (and fixed small readme error).
* Added missing line break spaces in readme.md
Co-Authored-By: ShadeDream <nick@shadedream.com>
* Keymap alignments on default_multi readme.md
Co-Authored-By: ShadeDream <nick@shadedream.com>
* Keymap alignments on default_multi readme.md
Co-Authored-By: ShadeDream <nick@shadedream.com>
* Keymap alignments on default_multi readme.md
Co-Authored-By: ShadeDream <nick@shadedream.com>
* Small alignment adjustment on the default keymap readme.md
Co-Authored-By: ShadeDream <nick@shadedream.com>
* use pragma once where applicable
* remove ?
* update default keymap readme
* remove un need include
* update readme with newbs guide
* set underglow and backlight to be on by default, and explicitly set them to no for the default keymap to handle the non Polestar case.
* put mine and benlyall's name in the code
* update readme
* port Massdrop CTRL/ALT to use RGB Matrix
Co-authored-by: Matt Schneeberger <helluvamatt@gmail.com>
* Massdrop lighting support working
This commit is to get the Massdrop lighting code working again through use of the compilation define USE_MASSDROP_CONFIGURATOR added to a keymap's rules.mk.
Added keymaps for both CTRL and ALT named default_md and mac_md. These should be used if the Massdrop style lighting is desired.
* Updating config based on testing results with patrickmt & compile errors
* Updates for PR5328
For CTRL and ALT:
Moved location of new RGB Matrix macros from config_led.h to config.h.
Added RGB_MATRIX_LED_FLUSH_LIMIT (time between flushes) to config.h for correct LED driver update timing.
Re-added missing breathing code for when Massdrop configurator mode is defined.
* remove prilik keymap form PR
* Implemented Eager Per Row debouncing algorithm.
Good for when fingers can only press one row at a time (e.g. when keyboard is wired so that "rows" are vertical)
* Added documentation for eager_pr
* Ported ergodox_ez to eager_pr debouncing.
* Removed check for changes in matrix_scan.
* Added further clarification in docs.
* Accidental merge with ergodox_ez
* Small cleanup in eager_pr
* Forgot to debounce_init - this would probably cause seg-faults.
* first [ass at pulling out common duck library functions
* use new library in jetfire
* use new library in duck lightsaver
* use new library in octagon v2
* put Device into the library
* refactor send_value
* refactor send_value and send_color
* use pragma once
* use pragma once
* use pragma once
* use pragma once
* rename backlight_led to indicator_leds to match with other duck boards
* rename enum
* make #define names consistent
* rename ducklib to duck_led
* update rules.mk ?= to =
* put rgb in the correct order
* add debounce debugging printouts
* turn on bootmagic lite and set it to the top left most key commonly programmed as Escape
* add reset key documentation
* fix that typo
* Update keyboards/duck/duck_led/duck_led.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* include the correct library
* initial commit
* get rid of some of the vanilla cookie cutter code
* Put in the matrix size and the pins
* add LAYOUT macro and a suitable keymap
* Add QMK Configurator support
* set bootmagic to lite
* put a RESET key into the default keymap
* edit kyuu readme file for description and quantrik.com link
* Update keyboards/quantrik/kyuu/config.h
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* fix captilization of keyboard name
* fix keymap wrapping issue and add MO key
* preserve RESET key location
* use one of the macros
* RGB Matrix overhaul
Breakout of animations to separate files
Integration of optimized int based math lib
Overhaul of rgb_matrix.c and animations for performance
* Updating effect function api for future extensions
* Combined the keypresses || keyreleases define checks into a single define so I stop forgetting it where necessary
* Moving define RGB_MATRIX_KEYREACTIVE_ENABLED earlier in the include chain
* Add tennie
* Jacobs Functions
* Switch back to normal layout
* Remove define from old template
* Fix broken keymaps
* Correct style errors, add bootlite
* Update readmes. Rename test keymap
* Missed comma
* Switch rgb from init to post init
Added Fantasie Impromptu and Nocturne Op. 9 No. 1 in B flat minor by Chopin
Added Isabella's Lullaby from The Promised Neverland
Added Renai Circulation and Platinum Disco from Monogatari
Added Terra's theme from Final Fantasy 6
* Updated iris, planck, and xd75 keymaps
* Added brightness down and up to commented layout of Symbol layer.
* updated config files for planck and iris
* removed unnecessary include lines from iris and planck config files
* updated XD75's PC layer and its NAVPC toggle layer
* fixed typo in alias declaration for C_BSPS
* changed alias names for BSPC toggle keys
The other bépo layouts were a bit too complex/weird or without LED code
and hard to transition to for new users. This config is a good base for
bépo users.
* Updated iris, planck, and xd75 keymaps
* Added brightness down and up to commented layout of Symbol layer.
* updated config files for planck and iris
* removed unnecessary include lines from iris and planck config files
* Fixed typo of 'confid.h' to 'config.h'
* Fixed broken links in docs
* Fixed a lot of dead links
* Removed all dead links that I could not find a replacement for
* Placed knops links back in
* Fixed plank keymaps so that they will compile for planck light
* Https doesn't work on knops.io
* tv44:budi now compiles
* s60_x:amnesia0287 now compiles
* Fixed allocation of key_combos so that narze keymap for planck can compile correctly
* Disabled rgb on ergodone and infinity
* Enabled tap dance so it compiles
* Added return statement so it compiles
* If compiling on light disable extra functionality
* Properly redefined variable so it compiles
* Remove remaining dead links
* Create custom Planck Light keycap
See README for details
* Link to WhatPulse in README
* More remapping, and add RGB LED effects
* Remove dead code, address PR feedback from @drashna
* Add macro for “screenshot region to clipboard” hotkey for macOS
Also remove unused layer / key logic
* Remove extraneous comment
* Incorporate PR feedback from @drashna.
Update README with new mapping.
* Add keycodes for new macros to keymaps
* add macros for commonly used shortcuts
* FIx macro code and add comments
* Replaced with build in QMK keycodes
* Removed macros that duplicated QMK keycodes
* The code in this directory supports the KBD65
* Update readme.md
* Update readme.md
* Clear up the confusion between the kbd67/kbd65 naming.
* Update keyboards/kbdfans/kbd67/readme.md
Co-Authored-By: Hackerpilot <briancschott@gmail.com>
* initial commit of e6v2 bmc files
* update readme with bmc template and reset key location
* fix up the switch matrix
* add usbconfig.h file
* add i2c files
* cleanup config.h
* cleanup rules.mk and remove non atmega32a architecture code
* add an appropriate keymap for testing
* update readme with warning not to flash this hex file onto atmega32u4 e6v2
* get rgb lights working
* add QMK Configurator support for 60_ansi layout
* add hhkb support layout
* add additional layouts such as tsangan and all and included QMK Configurator support for them
* add bootmagic lite, and have it be set to Esc or the key located at k50
* update readme
* fixup spacing for LAYOUT_all electrical matrix
* add some pragma once magic
* use i2c_master instead of custom i2c.c
* remove the custom i2c.c
* restore a more valid default keymap
* add eep_rst to keymap
* Add kwer keymap and RGB mod description to cypher
* Add custom led_set_user to keymap
* Remove unneccessary include path from keyboards/westfoxtrot/cypher/keymaps/kwer/keymap.c
Co-Authored-By: kwerdenker <sebastian.spindler@gmail.com>
* build size-check enhancement
Changed to display a warning when the free size of compilation result is less than 512 bytes.
* update message.mk
* add SIZE_MARGIN variable, change default margin 512 to 1024
for Example.
```
$ make SIZE_MARGIN=2048 crkbd:all
$ make crkbd:all ## mergin is 1024
```
* Update message.mk
change message to ‘approaching the maximum’
Co-Authored-By: mtei <2170248+mtei@users.noreply.github.com>
Added song of the ancients and kaine salvation fron Nier
Added Amusement park, Copied city, Vague Hope cold rain and weight of the world from Nier Automata
This PR is cherry-pick from 90b9a1aa7d in PR #5020.
@MxBlu copied quantum/rgblight.c to keyboards/mxss/rgblight.c on July 8, 2018. At that time, I think it would be better to copy quantum/rgblight.h at the same time.
Because if someone makes a change to `quantum/rgblight.[ch]` that is incompatible with the past, it may cause problems with the compilation of keyboards/mxss.
(Like when I changed the prototype of the `rgblight_effect_XXX()` functions of rgblight.c in PR #5020.)
* copy default over as starting point
* Getting rid of dvorak and colemak for now, added a couple changes to the
keymap
* removed refs to bad layers, formatting comments
* First version of my ergodox ported layout!
* Symbols layer, media layer, updated comments
* Hyper as a single key
* Fix stuck hyper key when switching layers
* Tweak some annoying things about the layout.
- move raise left and promote alt
- remove swap keys on the last layer
- reorganize media keys so they're easier to reach and more intuitive
- fix some comment template things
* Add readme for rjhilgefort planck layout
* readme tweak
* PR feedback changes
* Add support for wiring RGB LEDs for both halves directly to their respective controllers
RGB LEDs for each half don't need to be chained together across the TRRS cable with this
* Add split RGB LED support for serial
* Update config/rules for bakingpy layout
* Un-nest ifdefs for hand detection
* Read RGB config state from memory instead of EEPROM for serial updates
* Reuse existing LED pointer instead of creating new one
* Create custom Planck Light keycap
See README for details
* Link to WhatPulse in README
* More remapping, and add RGB LED effects
* Remove dead code, address PR feedback from drashna
* Adding new tap dance key
* Adding new tap dance code
* add code for copy/paste to tap dance
* testing tap dance enums
* New tap dance keycodes
* Fix enums
* handwired/magicforce61: refactor
Renamed layout macro KEYMAP to LAYOUT.
Keymap now uses #include QMK_KEYBOARD_H.
Refactored the default keymap to use non-auto-prepended keycodes per QMK standard.
Deleted deprecated action_get_macro block (was unused).
* handwired/magicforce61: Configurator support
* handwired/magicforce61: readme cleanup
Restructured the readme to be more similar to current QMK template.
* handwired/magicforce61: replace missing image in readme
Replaced the missing wiring image (error 404) with a table.
* handwired/magicforce61: rename readme to lowercase
* Convert config.h to #pragma once include guard
* rgblight.c: add RGBLIGHT_LED_MAP support
* add code to keyboards/helix/rev2/keymaps/five_rows/config.h to test rgblight.c:RGBLIGHT_LED_MAP
* Test end. Revert "add code to keyboards/helix/rev2/keymaps/five_rows/config.h to test rgblight.c:RGBLIGHT_LED_MAP"
This reverts commit e7488d6f73.
* update docs/feature_rgblight.md
* led_map[] move to PROGMEM
* introduce stt layout with K(row)(col)
* set bootmagic to lite
* Rename the original LAYOUT to LAYOUT_all
Introduce the STT layout
In additional the whole matrix was changed to support the K(row)(col) notation.
* rename LAYOUT to LAYOUT_all
* add QMK Configurator support
* stt keymap based on mrpetrov's default configuration on the hb85 he lent me
* update readme
* introduce basic and aop layouts along with QMK Configurator support for them
* add a new line
* add EEP_RST to layer 1 as it is needed to get rgb underglow to work
* add documentation on how to reset the eeprom on the board
* put contributors names where appropriate
* added Boy_.314's layout for halfnhalf keyboard
* reset rules.mk to default
* update keymap with qwerty layout, and enable tap dancing
* fixed formatting in layout visualization
* added rules.mk to custom layout
* added mod tap for ctrl/capslock
* fixed typo in config.h, remove excess in rules.mk, revert half_n_half rules.mk
* added Boy_.314's layout for halfnhalf keyboard
* reset rules.mk to default
* update keymap with qwerty layout, and enable tap dancing
* fixed typo in config.h, remove excess in rules.mk, revert half_n_half rules.mk
* added macros to raise layer
* fixed mismatched layout/comments
* fixed layout switching
* Remove unnecessary IS_COMMAND definition from clueboard/66_hotswap/gen1
* Remove old-style IS_COMMAND definition comment from dozen0
* Use get_mods() instead of keyboard_report->mods in georgi
* Recursively clone qmk_firmware repo
Specifically, so that it grabs the submodules, since ARM keyboards are becoming more common, and we are seeing more issues about chibiOS not being downloaded (in the error log, rather than by question)
* Wrap in shell
* keymap + alpha
* some fixes
* keymap + alpha
* some fixes
* drashna changes
* linked main Alpha repo in keyboards/alpha readme
* missed a spot
* there's another function called FUNC lol
* keymap + alpha
* some fixes
* keymap + alpha
* drashna changes
* Fixed include
* Revert "Fixed include"
This reverts commit ea92f261f8.
* messed up my git, fixed include
* starting work on TMO50 layout
* Update keyboards/tmo50/keymaps/default/keymap.c
Co-Authored-By: PyrooL <lm11887@gmail.com>
* Updated PyroL's TMO50 keymap
* Added task manager/Ctrl Alt Del that i stole from the eco keymap
* Clean up task manager and ctrl alt del macros
Co-Authored-By: PyrooL <lm11887@gmail.com>
* initial commit
* initial commit
* fixed indents
* spelling, capitalization, and order.
* added dota mode keymap, removed old comments
* fixed default keymap always having tilde, instead of grave accent and tilde. Improved dota keymap.
* lower does not change backspace to delete anymore
* corrected pgup/pgdown
* changed period on lower from numpad dot to regular dot
* added colemak and dvorak
* made colemak/dvorak border keys consistent with querty
* updated to match current practices, added custom metakeys for dvorak and colemak
* added disclaimer about audio
* renamed to lowercase
* replaced include guards with #pragma once
Co-Authored-By: rileyweber13 <rileyw13@protonmail.com>
* removed unncessary include
Co-Authored-By: rileyweber13 <rileyw13@protonmail.com>
* removed defines included in core
Co-Authored-By: rileyweber13 <rileyw13@protonmail.com>
* replace defines with an enum, switched from custom function to set_single_persistent_default_layer
* removed ifndef/include/endif left over from previous build system
* removed unnecessary ifdef block
* updated soungs to work with set_single_persistent_default_layer
* Instant 60
* Instant60 changes again
* turn off LSE and features
* Working RGB underglow 🎉
* Add missing files
* Update keymap to have reset
* Backlighting on
* Backlight code for instant60
* Move 072 files to common folder and use it in Instant60
* Updates
* Update keyboards/cannonkeys/instant60/rules.mk
Co-Authored-By: awkannan <andrew.kannan@klaviyo.com>
* add SCREEN_NAV layer for copy/pasting within screen
* working readreg/paste macros
* working read reg / paste macros
* write log and tran patterns, and expand
* add ls -la shortcut, add tab on combined layer
* put delete word on the right pinky key on shell_nav layer
* add TAB on the right side, add reset key
* added Cloud9 macros
* add cloud9 shortcuts to atreus layout
* added BROWSER_CONTROL layer
* finalized browser control layer
* adding comment
* add browser control layer to atreus
* add flashing command line
* remove the tab on combined layer
* remove the tomouse
* remove mouse layer, change log/tran expand patterns, cleanups
* add dumptlog macro
* add "delete to home" shortcut
* fix conflict
* remove unneeded mouse layer
* add meh shortcuts on the browser_control layer
* add/modify some macros
* explain the various layers
* putty paste is right mouse button
* add android studio shortcuts
* allow switching between base and alternate base layouts
* replace cloud9 shortcuts with android studio
* more android studio shortcuts
* add two meh shortcuts on keynav layer
* additional android studio shortcut
* added defines for android studio
* Updated layout after some months of testing.
The current setup looks quite better than the initial one. It's not
perfect but it allows me to work quite well.
The only big problem is the Alt modifiers on the home row which
sometimes break the typing if keys are pressed too fast. I'm also not
satisfied by the TAB key position on the thumb cluster.
Main improvements since previous push:
- Shift layouts on both halves
- Moved around symbols
- Improved number/fn keys
- Reorganized thumbs
* Used enum as suggested by @drashna :-)
* Corrected column count and adjusted layouts to include missing key
The original version reflected 14 columns and omitted KC_GRV, the 15th key on the top row. This revision adds support for the 15h key, and also updates the default (Tsangan) layout to include the HHKB layer keys.
* Reverted config.h to version in master branch
* Moved K413 to the correct location
* Added info.json
* Update keyboards/1upkeyboards/1up60hte/1up60hte.h
Co-Authored-By: newbold <adam@neatnik.net>
* Update keyboards/1upkeyboards/1up60hte/info.json
Co-Authored-By: newbold <adam@neatnik.net>
* Update keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c
Co-Authored-By: newbold <adam@neatnik.net>
* Update keyboards/1upkeyboards/1up60hte/keymaps/hhkb/keymap.c
Co-Authored-By: newbold <adam@neatnik.net>
* Update keyboards/1upkeyboards/1up60hte/keymaps/hhkb/keymap.c
Co-Authored-By: newbold <adam@neatnik.net>
* Update keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c
Co-Authored-By: newbold <adam@neatnik.net>
* fresh commit for a new fork for PR to upstream/master
* gaming mode added, lighting changes for other modes
* rules.mk fixed...
* fixed collision issue with aesthetic and shifty modes
* fixed collision issue with aesthetic and shifty modes
* troubleshooting game mode failing
* moved game tapdance key to default layer, fixed issue
* Align docker and vagrant base images - update box to debian 9.6
* Align docker and vagrant base images - lock docker image to debian 9
* Align docker and vagrant base images - update vagrant docker to debian 9
* added my own keymap
* changed thing
* updated keymap Samuel
* updated laypout for better one handed use
* updated stuff I want
* happy with my lagout
* formatting
* Added new literate config
* made everything nice
* cleaned
* fixed spelling and two small bugs in macros
* Made press and lift function for modifiers
* made taps occur on press instead of release
* added oneshot keys and chars cant be negative!
* removed debug message
* Added command and qwerty layers
* fixed bug with oneshot layer
* same bug, different key
Added Liebesleid by Kriesler (or Rachmaninoff), Michishirube from Violet Evergarden, Melodies of Life from Final Fantasy 9 and Eyes on Me from Final Fantasy 8
* Add nrichers keymap
* Additional keymap tweaks, add readme info
* Improve descriptions for changes from default keymap
* Add image of keymap, update .gitignore to
* Add image link
Adds an image of the modified keymap.
* Improve legibility of keymap changes with colour coding
* Tinker with color codes in Markdown
* Experiment with colour codes
* Tinker more with colour codes
* Figured out the easiest way to include colour coding
* Undo earlier .gitignore change
* Refactor layout macro names
Update the names of the layout macros to reflect QMK's desired usage.
- KEYMAP renamed to LAYOUT
- colinta keymap updated accordingly
- KC_KEYMAP renamed to LAYOUT_kc
- mtdjr keymap updated accordingly
* Update xd75.h to use #pragma once include guard
* Update keymaps to use QMK_KEYBOARD_H
* Refactor default keymap
- updated to use layout macro
- remove deprecated action_get_macro function
- add functions from QMK keymap.c template
- process_record_user
- matrix_init_user
- matrix_scan_user
- led_set_user
* Update supporting files
- updated config.h files to use #pragma once include guard
- remove errant QUANTUM_DIR code block
* Rename readme files to fully lowercase filenames
* Restructure keyboard readme
Updated the readme to better align with the current QMK template.
* Bugfixes to supporting files
* Make rgblight_update_dword not update eeprom (we already have
eeconfig_update_rgblight for that).
Make split i2c keyboards transfer active rgblight config rather than
eeprom saved version of rgblight config, enabling runtime changes
that aren't persisted to eeprom.
* prev_level and prev_rgb only store successfully transmitted values
* greenshadowmaker keymap for idobo xd75 massdrop
* remove uneeded config.h
* corrected format to match convention instead of xd75 where I accidentally started from
* Use correct functions for dip switch code
* Some planck cleanup
* Hopefully fix RGB Sleeping with RGB Matrix
* Add rgbmatrix extern
* Add numpad 5x6 layout
* RGB Tweaks
* Add RGB startup animation
* Minor RGB Fixes
* Turn off RBG on planck
* Enable separate storage of EEPROM
* Update Macro pad
* Add BJohnson Keymap and minor darshna tweaks
* Clean up rgb and other code for new numpad
* Remove clicky hachy thing
* Update my code to use built in MOD_MASK defines
* Fix up modifier calls
* Tweak to KC_MAKE
* Tweak to KC_MAKE
* Add Semi-colon to numpad
* Preprocess out rgb matrix stuff if not enabled
* Formatting of KC_MAKE
* Add stuff for matrix and light rgb coexistance
* Fix bad spelling
* Change where layer indication shows based on rgblight status
* Force set mods in KC_MAKE
* Optimize CRKBD
* added Boy_.314's layout for halfnhalf keyboard
* reset rules.mk to default
* update keymap with qwerty layout, and enable tap dancing
* fixed formatting in layout visualization
* added rules.mk to custom layout
* added mod tap for ctrl/capslock
* fixed typo in config.h, remove excess in rules.mk, revert half_n_half rules.mk
Added keymap for 60% board 1up60rgb. The map provides VIM-style navigation on a
second layer (L1) with HOME, PGDN, PGUP, and END keys on that same layer one
row below the home row. The layout is used by https://github.com/michaeldye.
* sleep until usb port becomes writable before running avrdude
* only wait for a writable USB port when not on MSYS
using MINGW or MSYS: sleep for one second, as before.
otherwise: wait for the port to become writable.
* typo
* typo
* Add satisfaction75 revision 1
* Update manufacturer
* Add tester layout and update rev1 comments
* Add ifdef guards for OLED for tester
* Add oled disabling rules
* Update to save backlight settings and setup for VIA custom config
* Add new VIA values to satisfaction75
* Safety guard in clock set mode
* Fix mistaken doc edit
* Address PR comments
* bring the default back to pass travis CI
* Address further PR comments
* Added 3 new songs and added new note type to musical_notes.h
Added Megalovania from Undertale, Kataware Doki from Kimi no Na Wa and La Campanella by Lizst to song_list.h
Added the breve (double whole note) and dotted breve note types to musical_notes.h. I included this because the default tempo is quite high, so I thought a note with higher
duration was needed
* Fixed indentation for new notes in musical_notes.h
Changed tabs to spaces in indentation
* 412_64 move to handwired
412_64 and its second printing, Mark Zero Stand Aside, are now obsolesced by new hardware. As only two units exist in the wild not owned by me, I'm moving the definition to handwired.
* Mark 3 Stand Aside ready for production.
Uploading firmware, compiled and tested, for Mark 3 Stand Aside. The hardware's ready, now the software is too.
* Whoops.
Should've branched before pushing Stand Aside. Sorry 'bout that.
* Revert "Whoops."
This reverts commit d222046cfe.
* Revert "Mark 3 Stand Aside ready for production."
This reverts commit c790899af7.
* Mark 3 Stand Aside ready.
Initial commit for Mark 3 Stand Aside, ready for production.
* Update keyboards/standaside/rules.mk
noroadsleft suggested removal of a line, 'LAYOUTS = ortho_4x16'. I agree.
Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>
* Cleanup for pull request.
Making changes requested by Drashna, as they're all good, and I know way less about the standards than they do.
* Initial cleanup completion.
Missed a few lines in standaside.c, they're cleaned up now.
* Update info.json
Adding layout for the macro version.
* Update info.json
Changed the macro layout to match exactly like the non-macro version (split backspace and bottow row match)
* added my launchpad
* updated keymap with legends and fixed layout errors
* Added default keymap with added layer for RGB controls and included the necessary config code
* fixed layer orders
* removed my personal keymap to clean PR
* missed an underscore
* updated readme
* removed more unnecessary code
* moved RGB code to its own config phone
* moved underglow info to its own readme
* removed redundant code from default_rgb config.h file, included QMK KEYBOARD H in place of initial defines in keymap.c
* reverted launchpad config
* removing the = because I can't figure out why its there
* Revert "removing the = because I can't figure out why its there"
This reverts commit e3b5e6d568.
* reverted rev1/config.h
* reverted all files I should not have touched
* removing redundant code in rules.mk
* readibility improvements to keymap
* Add ISO backslash key position to matrix and keymap files
* Use KC_NO instead of KC_BSLS for unused position in custom keymap
* Add new key position to json layout file used by online configurator
* Get things working except indicators
* Attempt to get things working
* hmm
* Compiles but doesn't run
* Make data transfer work
* Get all indicators working
* Remove old transport
* Prepare for pullreq
* Revert keymap from testing to production
* Final error checking for pull request
* Remove autogenerated is_command from config.h
* Rewrite pin toggles using qmk functions
* 412_64 move to handwired
412_64 and its second printing, Mark Zero Stand Aside, are now obsolesced by new hardware. As only two units exist in the wild not owned by me, I'm moving the definition to handwired.
* Mark 3 Stand Aside ready for production.
Uploading firmware, compiled and tested, for Mark 3 Stand Aside. The hardware's ready, now the software is too.
* Whoops.
Should've branched before pushing Stand Aside. Sorry 'bout that.
* Revert "Whoops."
This reverts commit d222046cfe.
* Revert "Mark 3 Stand Aside ready for production."
This reverts commit c790899af7.
* Update userspace with common config.h
* Add my dz60, satan and xd75 keyboard keymaps
* Fixing executable bits changed during last upstream merge
* Cleanup unnecessary files and defines
* Remove unnecessary defines from userspace config
* Add underglow controls to dz60 function layer
* Fixing merge conflicts
* Fixing exectable bits changed during merge
* Userspace update
* intial commit
* fix up some of the cookie cutter code
* define pins used and size of switch matrix
* enable lighting settings and bootmagic lite
* create the appropriate LAYOUT macro
* remove a comma for compilation errors
* provide a suitable keymap
* disable console and command due to firmware being too large
* add Caps Lock LED support
* Add QMK Configurator support
* fix markdown rendering
* fix mechmerlin to mechkeys
* use `register_code16` and relatives for tapdance code
* rename tapdance keys to more closely mirror the `KC` names in QMK
* additional naming change to match QMK style
* add a tapdance example for creating advanced mod-tap and layer-tap keys
* add optional curly braces to match QMK conventions
* change example to use `register_code16()` and tapdance keycodes more closely matching QMK variants
* Gray Studio HB85 Initial Support
* Fixed README image
* Updated README
* Disabled Bootmagic and Console for HB85
* Fixed Numpad 4 matrix place
* Fixes board crashing with RGB enabled
* Moved HB85 files to gray_studio folder
* Uses old i2c library since this version makes RGB underglow work
* Improved default keymap with underglow control layer
* Removes obsolete program and uses generic script instead
As per zvecr feedback
* Uses GPIO Functions to initialise and set RGB underglow PINS
* Add keycode for KC_MAKE
* Add KC_MAKE keycode
* Add stanrc85.c file with KC_MAKE
* Remove unused include
* Improved KC_MAKE stolen from Drashna
* Define mod mask for new KC_MAKE code
* RESET board to flash after compiling
* Remove send_string
* RESET fixed in KC_MAKE
* add dusty keymap
* change keymap folder to match my github username
* initial keymap completed in comments only
* layout without NAV completed in comments only
* disable Command to prevent interference with Space Cadet keys
* switch _ and \ in the symbol layer
* Layers complete through _NAV
* add thumb keys to _NAV
* complete _NUM
* all layouts complete; still needs `process_user_record()`
* completed first draft of keymap; still needs config.h to match
* corrected keycodes for Mac macro-volume keys
* fix Mac mute keycode
* add missing Mac keycodes for previous and next track
* placeholder for qwerty layout, not yet completed;
remove unnecessary breaks;
add todos
* eliminate Preonic branch before switching to Minidox branch:
• delete dustypomerleau Preonic keymap folder
• complete keymap.c (QWERTY layer, vanilla numbers layer)
TODO:
• add preferences to config.h
• complete the README
* edit commented keymap diagrams for clarity in dual function keys
* define initial config.h and add rules.mk for mouse key support
* fix redundant line after implementation of tap_code()
* fixed key_timer declaration, added README and rules
* formatting of keymap
* add CTPC to config
* cycle thumb keys to favor center position
* modify config.h for temporary Pro Micro compatibility
* remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL
* merge _SYS and _MEDIA on new Z_SYS key
* ALT_OP example of new MT macro complete
* initial narze-inspired MT fixes in PRU
* add (currently superfluous) custom keycode for the _SYS layer
* rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things
* remove permissive hold to improve tapping performance
* remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward.
* final commit before tapdance code; correct layout in comments
* initial tapdance code for shifted mod taps
* add numeric and ergo NUM layers and pinky shifts for keycuts
* add TD() wrappers to tapdance codes and clean up commented layout guides
* add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance
* update commented schematics for better readability
* add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors
* add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term
* remove reduced oneshot tapping toggles
* update README
* newline tweak :)
* Update keyboards/minidox/keymaps/dustypomerleau/keymap.c
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior
* enable extrakey in rules to enable media keys
* enable extrakeys for media key compatibility on macOS
* add dash and slash to _NUM layers
* change to universal volume keycodes
* revert micro volume adjustments to macOS-specific codes due to lack of functionality (macro volume adjustments are still universal)
* fix image of _SYS layer in comments
* more diagram fixes in comments
* fix typo
* simplify tapdance code
* match _NUM_N to _NUM_E
* move slash to allow better use of comma in number layers
* match layer and keycode enums to the docs
* correct qwerty numlock to match numeric numlock layer
* Change how desktop commands work
* Add DST_MOD_MASK as a config option
* DST_RMV → DST_REM
* Add melody96:konstantin keymap
* Update custom SEND_STRING
* Move feature flags from userspace into keyboard rules
* Use "Vo-", "Vo+" instead of "VoD", "VoU" in keymap comments
* Add RGB controls and numpad Unicode to Melody96 keymap
* Add RGB_SET keycode to Melody96 and RGB files to userspace
* Generate UNICODE and UNICODEMAP constants using macros
* Avoid collisions with X_* send string constants
* Use two spaces before inline comments
* Add _keymap versions of other custom Quantum functions
Not added: eeconfig_update_keymap, eeconfig_read_keymap
* Switch to UNICODEMAP in keyboard rules
* Make toggle_numpad a nested function in process_record_user
* Set Melody96 underglow color to Godspeed blue on EEPROM reset
* Remove most _keymap and _user definitions in userspace
Some keyboards misuse _user functions by defining them in the base files
instead of the corresponding _kb functions (especially led_set_user and
matrix_init_user). Until this is fixed (#5148), I've removed definitions
in my userspace that could cause linking collisions.
* Update GODSPEED_BLUE values and RGB mode keys
* Add GODSPEED_YELLOW color
* Set preferred intervals for rgblight effects
* Update tap dance function names
* Replace td_lshift_fn with generic td_mod_layer, add TD_RCTL_FN
Move TD_FN_RCTL after TD_RCTL_FN
* Replace td_fn_rctrl with generic td_layer_mod
* Add blank lines, prefer explicit initialization
* ACTION_TAP_DANCE_DOUBLE_MODS → ACTION_TAP_DANCE_DOUBLE_MOD
* Update Godspeed colors
* Add media controls to Melody96 keymap
* Add SysRq, Break combos and other keys to Melody96 keymap
* Add HOME/END keys as upper/lower on arrow-up/down
* Reduce .hex file size by turning off unneeded options
* Put digit keypad onto left hand upon RAISE; this will sometimes be preferable to double-hits of right hand
* Latest super latest version merge
* cbbrowne keymap for XD75re
* starting notes on XD75re keymap plans
* First draft of bottom row of QWERTY
* Switch my special bottom line over to QCENT
* Dunno
* Filling in wanted keys, bit by bit...
* Add copyright, extra macro
* Clean up comments, remove some experimental code I didn't like
* TODO plans for xd75re
* clean up keyboard layout
* QCENT2 is my new experiment for the main keyboard...
* Add a few more main layer keys, and modify LOWER to shift things outwards to conform with main layer
* Clean up RAISE layer to conform with main layer, remove QCENT layer as QCENT2 is the new thing
* More xd75 changes, now that I actually have it in hand
* shift keymap around, as original attempt was a bit too aggressive in keeping to the edges
* more revs to XD75
* Dropping parts of the centre keypad in favor of Keys I Really Need
* Improve documentation to conform with how builds are done now
* Improve documentation to conform with how builds are done now
* Add cbbrowne rules file as alternative to having the rules in Makefile
* Makefile not needed anymore for individual keymap
* Some revs to my keymapping
* Add {}
* Add PGUP/PGDN
* Shifted some middle-range keys around
* Needed Tilde, Backquote, and to shift RESET onto FUNCTION layer
* Wanted ~
* cbbrowne hasn't anything to do with hadron keymaps
* trim unneeded bits
* I prefer OrgMode for my notes
* Have a right-alt
* Layer keys make LED colors change
* Add sample user rules for cbbrowne
* Add source of xd75 rules
* Individualized xd75 rules
* Adopt LAYOUT to genericize the layout as an ortholinear 5x15 keyboard
I'm a web designer and know there are several "decent" code editors out there, but I would figure not everyone into keyboards is, so I found Sublime text a bit of a hard sell for someone who just need to manipulate some text files. VS Code or Atom would b a much better suit for them instead of dropping $80 on a "decent" text editor.
* Tidy up 5x6.h
- replaced tabs with spaces (QMK convention)
- aligned layout macro visually
* Fix Configurator support for Dactyl Manuform 5x6
- layout macro had the wrong name in info.json
* Tidy up 5x7.h
- replaced tabs with spaces (QMK convention)
- aligned layout macro visually
* Fix Configurator support for Dactyl Manuform 5x7
- corrected keyboard height
- layout macro had the wrong name in info.json
* Tidy up 6x6.h
- replaced tabs with spaces (QMK convention)
- aligned layout macro visually
* Fix Configurator support for Dactyl Manuform 6x6
- layout macro had the wrong name in info.json
* Separate keymaps to VIA enabled/dissabled.
- Default rules.mk has been changed to disable via.
- VIA keymaps have been added for default keymaps.
* Update naming
* Add INSERT and EEP_RST to HS60 keymap
* Add INSERT to keymap
* Layer based RGB colors
* Move RGB code to layer_rgb.c
* New file with layer based RGB colors
* Use RGB code if RGBLIGHT is enabled
* Set RGB options in config.h
* Remove rgb enable from init user
Some keyboards misuse _user functions by defining them in the base files
instead of the corresponding _kb functions (especially led_set_user and
matrix_init_user). Until this is fixed (#5148), I've removed definitions
in my userspace that could cause linking collisions.
* Initial refactor of handwired bluetooth mod to keymap
* Initial refactor of handwired bluetooth mod to keymap - strip out unnecessary duplicate config, update readme
* Initial refactor of handwired bluetooth mod to keymap - reduce firmware size
* Initial refactor of handwired bluetooth mod to keymap - update readme image
* add dusty keymap
* change keymap folder to match my github username
* initial keymap completed in comments only
* layout without NAV completed in comments only
* disable Command to prevent interference with Space Cadet keys
* switch _ and \ in the symbol layer
* Layers complete through _NAV
* add thumb keys to _NAV
* complete _NUM
* all layouts complete; still needs `process_user_record()`
* completed first draft of keymap; still needs config.h to match
* corrected keycodes for Mac macro-volume keys
* fix Mac mute keycode
* add missing Mac keycodes for previous and next track
* placeholder for qwerty layout, not yet completed;
remove unnecessary breaks;
add todos
* eliminate Preonic branch before switching to Minidox branch:
• delete dustypomerleau Preonic keymap folder
• complete keymap.c (QWERTY layer, vanilla numbers layer)
TODO:
• add preferences to config.h
• complete the README
* edit commented keymap diagrams for clarity in dual function keys
* define initial config.h and add rules.mk for mouse key support
* fix redundant line after implementation of tap_code()
* fixed key_timer declaration, added README and rules
* formatting of keymap
* add CTPC to config
* cycle thumb keys to favor center position
* modify config.h for temporary Pro Micro compatibility
* remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL
* merge _SYS and _MEDIA on new Z_SYS key
* ALT_OP example of new MT macro complete
* initial narze-inspired MT fixes in PRU
* add (currently superfluous) custom keycode for the _SYS layer
* rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things
* remove permissive hold to improve tapping performance
* remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward.
* final commit before tapdance code; correct layout in comments
* initial tapdance code for shifted mod taps
* add numeric and ergo NUM layers and pinky shifts for keycuts
* add TD() wrappers to tapdance codes and clean up commented layout guides
* add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance
* update commented schematics for better readability
* add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors
* add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term
* remove reduced oneshot tapping toggles
* update README
* newline tweak :)
* Update keyboards/minidox/keymaps/dustypomerleau/keymap.c
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior
* enable extrakey in rules to enable media keys
* enable extrakeys for media key compatibility on macOS
* add dash and slash to _NUM layers
* change to universal volume keycodes
* revert micro volume adjustments to macOS-specific codes due to lack of functionality (macro volume adjustments are still universal)
* keymap + alpha
* some fixes
* keymap + alpha
* some fixes
* drashna changes
* linked main Alpha repo in keyboards/alpha readme
* missed a spot
* there's another function called FUNC lol
* keymap + alpha
* some fixes
* keymap + alpha
* drashna changes
* Fixed include
* Revert "Fixed include"
This reverts commit ea92f261f8.
* messed up my git, fixed include
* starting work on TMO50 layout
* Update keyboards/tmo50/keymaps/default/keymap.c
Co-Authored-By: PyrooL <lm11887@gmail.com>
* Removed since options are in userspace
* Removed RGB option that was breaking one of my builds
* Remove unused options
* Removed options present in userspace, add board specific options here
* Removed code also present in userspace
* Turns out those lines were needed, added them back
* Testing changes
* Added code to ensure board read as ANSI instead of default ISO for HS60
* Setting \ key to "MOD" instead of "ALPHA" for lighting
* enable velocikey for my userspace and explicitly for my 75% layout
* add guards to only turn on RGB stuff if the RGB pin is actually defined
* update 60_ansi keymap
* update the 60_ansi_split_bs_rshift keymap
* update 66_ansi keymap
* update docs
* Update layouts/community/60_ansi/mechmerlin-ansi/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update layouts/community/66_ansi/mechmerlin/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update layouts/community/60_ansi/mechmerlin-ansi/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update layouts/community/60_ansi/mechmerlin-ansi/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* remove my attempt to find a good way to detect this
* move audio clicky into user space and do feature setting per keyboard
* fixup 66_ansi keymap
* update changelog
* update readme
* Added personal keymaps for Planck, Preonic, Vitamins Included by Juno
* Removing redundancies as suggested
* More removals that were missed out in the previous commits
* Updated Preonic to use new layout
* More redundancies missed out
* Updated more optimal code for FN layer LED indicator.
* Further codes clean up.
* Added a dual windows/osx layout
Default layer is normal ISO for windows. Second layout is Windows ISO layout but for OSX, but with the keys corrected so you will get the correct shifted and alt'd keys on OSX (keyboard keys match OSX keys without having to change your keyboard type in system preferences). Layer three is configuration and other functions, and layer four is where the shifting magic happens. Also tab and caps lock have been swapped around.
* made sure bootmagic is in a seperate rules.mk
made sure bootmagic is in a seperate rules.mk
* commiting the keymap rules.mk
commiting the keymap rules.mk
* Convert community layout to userspace for future use
* Big readme update
* Move layer toggle to CAPS
* Readme updates
* Deleted since unused
* Removed call to unused .c file
* [keymap] adding my Levinson keymap
pretty self explanatory, added the readme, just in case
tested it just now, seems to work fine for my needs
* Update keymap.c
removing the deprecated persistent layer function as Drashna kindly reminded me
* Apply suggestions from code review
incorporated the suggestions, and thanks again for taking care of me with my silly changes :)
Co-Authored-By: OMGVee <mateescu.victor@gmail.com>
* Fix up audio calls
* Add backlight controls
* Add backlight controls and remove RGB underglow
* Make HS60 board specific changes to readme
* Remove BL_TOGG as it isn't use on this board
* use #pragma once
* get rid of code for unused indicators
* pragma once and other small fixes for consistency
* use #pragma once
* pragma once and other small fixes for consistency
* add a short blurb to the readme
* turn on compiler optimization flags
* remove the compiler optimization
* remove compiler optimization for super16
* pragma once and turn on bootmagic lite
* pragma once changes and turning on bootmagic lite
* switch to using pragma once
* switch to using #pragma once
* switch to using #pramga once
* convert tabs to spaces
* fix#4578: don't call gemini protocol code when in bolt mode
Add missing break; statements in switch. The missing break resulted in
a fall through and an additional processing of the gemini code.
* Initial Clueboard 66% arm support
* Fix LAYOUT_66_ansi
* wip
* Bring this branch up to date with led_matrix
* Get Clueboard 66% hotswap working with led_matrix
* stm32 cleanup
* Fix compiling for clueboard 66% hotswap prototype
* Reduce the size of the prototype firmware
Many instances in the QMK Docs referenced KEYMAP macros, which is outdated terminology.
Replaced most instances of KEYMAP with LAYOUT, to reflect the desired usage.
* Draft commit of typing speed RGB control
* More information in the readme
* Support all RGB animation modes (Fixes#1)
* Added support for all RGB light modes to use typing speed
Except christmas lights because that is seizure-inducing at high speeds!
* Introduced a value range specific to each RGB mode
Because some modes are a little too much when running at full speed!
* Update readme.md
* Update readme.md
* Re-arrange typing_speed definitions (Fixes#5) (#6)
* Re-arrange variable definitions to avoid including quantum.h from rgblight.c
* Fix a compilation error when trying to run make test:all
* Tweaks to the typing speed decay rate
* Renamed to momentum; moved implementation into dedicated files
* Groundwork for toggling momentum on/off (currently always on)
* Add EEPROM toggle for momentum-matching
* Moved momentum out of RGBLIGHT_ENABLE toggles so it's more generic
* Move momentum decay task out of rgblight_task()
* Fix missing momentum.h in lufa.c
* Experimental LED support (untested)
* Draft commit of typing speed RGB control
* More information in the readme
* Support all RGB animation modes (Fixes#1)
* Added support for all RGB light modes to use typing speed
Except christmas lights because that is seizure-inducing at high speeds!
* Introduced a value range specific to each RGB mode
Because some modes are a little too much when running at full speed!
* Update readme.md
* Update readme.md
* Re-arrange typing_speed definitions (Fixes#5) (#6)
* Re-arrange variable definitions to avoid including quantum.h from rgblight.c
* Fix a compilation error when trying to run make test:all
* Tweaks to the typing speed decay rate
* Renamed to momentum; moved implementation into dedicated files
* Groundwork for toggling momentum on/off (currently always on)
* Add EEPROM toggle for momentum-matching
* Moved momentum out of RGBLIGHT_ENABLE toggles so it's more generic
* Move momentum decay task out of rgblight_task()
* Fix missing momentum.h in lufa.c
* Added documentation
* Renamed feature to velocikey
* Reverted readme to original state
* Correct the readme title
* Updated feature name in the docs
* Update EECONFIG name
* Add compile-time toggles for velocikey
* Update feature documentation
* Revert "Merge branch 'led-support' into master"
This reverts commit e123ff5feb, reversing
changes made to df111a55b9.
* Move velocikey EECONFIG definition to depend on VELOCIKEY_ENABLE
* Rename decay_task function to decelerate
* Apply suggestions from code review
Co-Authored-By: chrislewisdev <chris@chrislewisdev.com>
* Re-order eeconfig definitions
* Apply coding conventions
* Apply #ifdef check in lufa.c
* Refactored interval time checks into one functionc
* Small rename
* Fix unused function error for layouts not using all rgb effects
* Only update EEPROM if Velocikey is enabled
* Incorporate code review feedback
* Small adjustment to top-end decay rate
* Add Velocikey documentation to table of contents
* Bring tetris:default keymap size down by disabling audio
Descriptions for B5_AUDIO, B6_AUDIO, and B7_AUDIO under Hardware Options were partially italicized when parsed by Docsify, though rendered as intended by GitHub.
* initial commit
* get rid of vanilla cookie cutter code and replace with more correct info
* edit config file for pins and switch matrix size
* turn on bootmagic lite, and backlight/rgb settings
* copy pasta switch matrix from noroads tool
* create an appropriate keymap (copy pasta)
* disable some features to decrease firmware file size
* add qmk configurator support
* add in support for caps lock, scroll lock, and num lock leds
* add temporary pdhelix(Patched Helix) code
* add test code into quantum/split_common/matrix.c
* add test code into keyboards/handwired/pdhelix/
* Revert "add test code into keyboards/handwired/pdhelix/"
This reverts commit 9ed98f0797ddd962c99756689fc4ecb4cd067d3d.
* Revert "add test code into quantum/split_common/matrix.c"
This reverts commit 1876d3ed69f6c213153a9f6476192be839f16c1f.
* Revert "add temporary pdhelix(Patched Helix) code"
This reverts commit 41ac92b814e3f894eaf85bc3e5bb945895342fa8.
* fix quantum/split_common/matrix.c: select_col()/select_row()
* Changed use of '\s' in grep to '[ \t]' for portability
* Pushed DFU Keyboard.h into a shell script
* Fixed execution permissions on make_dfu_header,sh
* introduce wkl directory and readme
* move bface into winkeyless directory and edit readme for new make instructions
* move bmini into the winkeyless directory and edit readme
* move bmini ex into winkeyless directory
* edit readme some more
* add newbs guide to readmes
* fix path to bface
* temporarily turn off community layout support until we refactor this taking out all the custom ps2avrgb stuff
* Change Command keycode defaults to match corresponding Bootmagic codes
* Make alternate magic key keycodes consistent
* Reflect changes from previous commit in tmk_core/common/command.c
* Remove unnecessary MAGIC_KEY_* definitions from keymaps compatible with these changes
* Swap E and BSPACE for MAGIC_KEY_EEPROM
* Add MAGIC_KEY_EEPROM_CLEAR instead of MAGIC_KEY_EEPROM_ALT
* Remove BOOTMAGIC_ENABLE checks around EECONFIG stuff
* Update Command descriptions
* initial work to add eeprom to haptic feedback and decouple the feedback process from keyboards
* Haptic feedback enhancements: on/off toggle working, feedback order working
todo:
-work on modes switching
-get modes switching to save to eeprom
* haptic enhancement - eeprom and modes added
* Added set and get functions for haptic feedback
* initial implementation of solenoids under haptic feedback
* changed eeprom to 32 bits to reserve blocks for future features
* start documentation of haptic feedback
* change keycode per comment from reviewers
* typo fixes
* added eeprom for solenoid configs
* added solenoid and docs
* Add/fix default parameters configs, improve docs
* more doc cleanup
* add in solenoid buzz toggle, clean up doc
* some fixes for error in compiling solenoid
* fix a chibios specific i2c read function and added one for AVR controllers in DRV2605L.c
* fixes for avr side issues
* update keymap
* fix keymap compile error
* fix bugs found during solenoid testing
* set pin that is not powered during bootloader
* added warning about certain pins on the MCU may trip solenoid during DFU/bootloader
- flags for the linker
- added INSERT key as I kinda use it for work fairly often
- turned on more things in rules.mk since I recovered space via linker
flags and whatnot
Based on conversation with Drashna on Discord, we know that if ONE_SHOT_TAP_TOGGLE is 5, then tapping a one shot mod key 5 times holds the one shot key permanently, but to come out of this, you need to press the same key only once.
* Add support for using ranges for RGB
This patch adds support for controlling continuous ranges of RGB LEDs.
Helper functions for split boards are also available.
* RGB Range: Use hardware-platform agnostic wait
* Update KC_GESC documentation
- document caveats on OSX and expected behavior with KC_GESC and GUI
- clarify documentation slightly
- give examples of expected output in actual use
* Update OSX -> macOS
* Captilization
* remove simply
* added my own keymap
* changed thing
* updated keymap Samuel
* updated laypout for better one handed use
* updated stuff I want
* happy with my lagout
* formatting
* Added new literate config
* made everything nice
* cleaned
* fixed spelling and two small bugs in macros
* Made press and lift function for modifiers
* Remove problematic unicode_map stub definition in process_unicodemap.c
* Add unicode_map declaration to process_unicodemap.h
* Disable UNICODEMAP on converter boards that don't use it
* Added xeal60 via clone of lets split
* Delete removed other keymaps
* Basic keymap (no FN). Compiles.
* Removed NP_STAR and NP_SLSH.
* Removed "debounce_algo = manual" in all keyboards with CUSTOM_MATRIX = yes.
* Changed order of rules in TMK. Documented feature.
* Fixed missing whitespace in debounce documentation
Table wasn't working due to missing newline.
* Added bold in a few areas.
* DO NOT USE - Removed debounce from TMK.
* Remove accidental xeal60 commit
* DO NOT USE - debounce successfully compiled.
* DO NOT USE Revert back to original API to support split_keyboards.
* Working eager_pk
* Whitespace cleanup.
* Restored debounce.h since there wasnt any real change.
* Moved debouncing_time variable to inside #if debounce
* Removed check for custom_matrix. We can safely include the debounce file for compilation when custom_matrix is used.
* Removed #include "matrix.h" from debounce.h
* Bug fix - was using MATRIX_ROWS instead of num_rows
* Fixed compilation error with debounce_sym_g
* Renamed DEBOUNCE_ALGO to DEBOUNCE_TYPE
* Malloc array in debounce_eager_pk, since split keyboards only use MATRIX_ROWS/2.
* Fix compile error in debounce_eager_pk
* Stricter, leaner DEBOUNCE_TYPE section in common_features.mk. Cleanup debounce_type.mk
* Add suspend functions
* Disable RGB code if it's disabled
* Add keyboard_init functions
* Change where references so it will compile
* Wrong command chained in wake up kb function
* Fix non-feature file changes
* Add documentation
* Re-add matrix init docs
* add rgblight code to example
* Remove suspend code
* Clean up docs
* Fix docs
* Fix suspend code
* more doc fixes
* change function to startup_* rather than keyboard_init_
* fix spelling error
* fix up docs to finish removing keyboard_init
* Use Pre and Post init functions
* Update Documenation
* Remove changes to my keymap and userspace code
* Cleanup
* Revert changes to extra files
* Forgot a semicolon
* Make sure all protocols call keyboard_setup
* Cleanup functions
* Unset startup_user
* Remove changes from division keyboard
* Readd startup_user function
* Remove all to startup_user
* Update docs/custom_quantum_functions.md
Co-Authored-By: drashna <drashna@live.com>
* Update docs/custom_quantum_functions.md
Co-Authored-By: drashna <drashna@live.com>
* Add suggestion line
* Rebase fixes
* Update documentation to be more useful/accurate
* Cleanup of documentation
* Fix spacing inconsistency
* Revert unexpected change to keymap
* Add a mechanism for force building a particular community layout
* Add docs for FORCE_LAYOUT argument
* Update output name when FORCE_LAYOUT is enabled
* Don't click if turning audio off
On ARM, playing the click when turning off audio causes the audio get stuck and continually play the tone
* Fix Audio EEPROM support for ARM
* Update touched files to conform to QMK Coding Conventions
* Add better check for ARM EEPROM support
* Migrate fn_actions for default keymaps
* Rename the Grave/Escape Shift masks
* No need for shift_esc_shift_mask
* Change breaks to return false
* Right align pointers
* Add default case
* Separate cases with empty lines
* NUBS_Z: initial version
Create a keycode that is normally Z, but KC_NUBS when tapped while Alt is being held.
This removes the possibility of using an Alt+Z shortcut.
* NUBS_Z: modification
Modify NUBS_Z macro to only use alternate operation if Right Alt is being held, rather than responding to either Alt key.
Also add QMK version keycode to System layer, Equals key.
* Remove unneeded breaks from process_record_user
* Macro refactoring
- removed G_RST and G_C10R macros
- updated G_BRCH macro
- outputs `master` if used while Shift is held down; or my git alias for the current branch otherwise
- updated G_FTCH macro
- outputs `git pull upstream ` if used with Shift; `git fetch upstream ` otherwise
- swapped `modifiers` variable for `get_mods()` function directly for checking modifier state
- swapped keymap-level modifier mask macros for QMK-core mod mask macros (thanks vomindoraan #4337)
- renamed MODS_RALT_MASK to MOD_MASK_RALT (more consistent with the above change)
* Update readme files
* set bootmagic from no to lite and put in a note in the readme
* use pragma once
* discovered a compile error when testing with default keymap. The inlined led functions need to be externed in the .c file
* might as well turn on mouse keys as well
* [Keymap] Adding buhearns keymap
* Removing deprecated function
with fauxpark's help
* Update readme.md
* Switching to UNICODE_ENABLE
with drashna's help
* Update rules.mk
* Update config.h
* Update config.h
Tidying up
* Update keymap.c
Tidying up
* Update readme.md
Tidying up
* Update rules.mk
Tidying up
* Removing GESC and adding TILD
* initial commit with edits to vanilla code
* Add QMK Configurator support
* add an appropriately generated keymap
* pins, matrices, and features added in
* moved it all to a regular directory. It's called regular as that's what it's called in the group buy. In the future we will have other directories for the other PCBs that are delivered to customers.
* forgot caps lock led support
* Update keyboards/doro67/regular/keymaps/default/config.h
Use the NAME
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update keyboards/doro67/regular/readme.md
Be more explicit
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Add stm32f072 base ck4x4 to handwired
* add prints
* Save these tries
* Save changes again
* Working hadron oled
* OLEd working but ws2812b still iffy:
* save another try
* Encoder feature + OLED
* RTC code
* Implement clock setting mode
* Whitespace
* Encoder hooked up to working LED PWM code
* Add missing files
* eeprom changes
* Save changes
* Move i2c master
* Move satisfaction75 under cannonkeys
* Set proper default folder
* Revert some core changes
* Undo paved iris changes
* Reorganize code for maintainability and prep for new features
* Add starting code for clock OLED mode
* Clock set mode finished
* Add custom encoder modes
* Actually add VIA keymap
* Gate to only 072
* fix gate for only 072
* Update header guards and includes
* Update i2c selection strategy
* Update board.c to handle software reset to DFU
* add dusty keymap
* change keymap folder to match my github username
* initial keymap completed in comments only
* layout without NAV completed in comments only
* disable Command to prevent interference with Space Cadet keys
* switch _ and \ in the symbol layer
* Layers complete through _NAV
* add thumb keys to _NAV
* complete _NUM
* all layouts complete; still needs `process_user_record()`
* completed first draft of keymap; still needs config.h to match
* corrected keycodes for Mac macro-volume keys
* fix Mac mute keycode
* add missing Mac keycodes for previous and next track
* placeholder for qwerty layout, not yet completed;
remove unnecessary breaks;
add todos
* eliminate Preonic branch before switching to Minidox branch:
• delete dustypomerleau Preonic keymap folder
• complete keymap.c (QWERTY layer, vanilla numbers layer)
TODO:
• add preferences to config.h
• complete the README
* edit commented keymap diagrams for clarity in dual function keys
* define initial config.h and add rules.mk for mouse key support
* fix redundant line after implementation of tap_code()
* fixed key_timer declaration, added README and rules
* formatting of keymap
* add CTPC to config
* cycle thumb keys to favor center position
* modify config.h for temporary Pro Micro compatibility
* remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL
* merge _SYS and _MEDIA on new Z_SYS key
* ALT_OP example of new MT macro complete
* initial narze-inspired MT fixes in PRU
* add (currently superfluous) custom keycode for the _SYS layer
* rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things
* remove permissive hold to improve tapping performance
* remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward.
* final commit before tapdance code; correct layout in comments
* initial tapdance code for shifted mod taps
* add numeric and ergo NUM layers and pinky shifts for keycuts
* add TD() wrappers to tapdance codes and clean up commented layout guides
* add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance
* update commented schematics for better readability
* add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors
* add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term
* remove reduced oneshot tapping toggles
* update README
* newline tweak :)
* Update keyboards/minidox/keymaps/dustypomerleau/keymap.c
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior
* Grab HEX and BIN files from autogen
And push them to qmk.fm/compiled
* Make autogen copy extension agnostic
This way, when travis cl scrpit looks for hex files, it will actually grab bin files, and not hex files for ARM boards
* Handle the AUTOGEN in :bin target to properly handle edge cases
Both the TADA68 and ATSAM boards generate the hex file and then convert it to a bin file. The changes I made does not handle this well, at all. This removes the hex and replaces it with a bin, if a bin is normally generated.
* Revert hex target to original copy command
* Check hex and bin separately in compile push script
Since I don't know how to script this, well
* Simplify push to compiled folder
* Further simplify compiled push script
* Move AUTOGEN parsing to a more sane location to prevent tech debt
Thanks to skully!
* Remove AUTOGEN completely, as it's not needed
This has the benefit of making everything super simple, since we can pull every hex and bin from the root of the qmk_firmware folder, and move that to th compiled folder. This also removes old and unneeded code, and removes some tech debt that has been accrued, without adding more, in theory.
* Tweaks to default 1up60hte layout + support for HHKB style layout
* Added changes to layouts
* Fix config.h
* Fixed errant KC_NO in layout
* Added readme to keyboard... Will update with images/store link when avail.
* Update to use LAYOUT_60_hhkb default layout
* md formatting fix
* Update keyboards/1upkeyboards/1up60hte/readme.md
Co-Authored-By: bubnick <bubnick@users.noreply.github.com>
* Update keyboards/1upkeyboards/1up60hte/readme.md
Co-Authored-By: bubnick <bubnick@users.noreply.github.com>
* Added layout to rules.mk, fixed layout to be compatble with community HHKB keymaps
* Added image, updated store page to readme
* Add userspace files for vosechu
* Code review corrections
* Few more code review corrections
* Initial add of Laptreus code
* Initial add of Laptreus code
* Adding last punctuation to default
* Add some debug suggestions to the debug readme
* Fixes for PR feedback
* Fixing capitalization of readme files
* update auto detect connection logic
* remove unneeded file
* make an appropriate readme
* amend the LAYOUT macro to adhere to new QMK standards and create an appropriate keymap
* add QMK Configurator support
* a bunch of changes lol
* delete unneeded routines
* update date to modern times
* remove a useless prototype
* add in drashna's suggestions on PR
* Improvement of Space Cadet Shift by preventing to automatically apply a modifier on the key and allow to override the default modifier. Closesqmk/qmk_firmware#3815
* Improve the use of the DISABLE_SPACE_CADET_MODIFIER flag to avoid unregistering KC_LSFT when equals to LSPO_MOD
* change #if to if statement
* Added callbacks to one shot modifier changes
* Altered signature of callback functions
* Reordered the callback methods, shortened brief documentation
* Added One Shot Modifier callback documentation
* First attempt at unit tests
* Revert "First attempt at unit tests"
This reverts commit 5ec21a7822.
* Simplified oneshot function implementations
* Made clear_oneshot_locked_mods to be conform action_util.h, adhering to the (void) signature
* Made used datatypes for oneshot mods consistently unsigned integers
* Corrected callback to call clear callback when clear_oneshot_locked_mods is invoked
* Simplified oneshot equals statements
* Corrected return type and signature of get and set oneshot locked mods
* Consolidated one shot callbacks, added initial layer callback version
* Fixed non-updating one shot layer variable after timeout or other clear, added code comments
* Added better one shot key docs
* added keyboard jj4x4, a shorter version of the jj40
* removed useless file
* edited jj4x4 readme.md
* optimized array size in jj4x4 config.h, removed reference to jj40 layouts from rules.mk
* removed custom matrix for this ps2avrgb board, refactored column and row pins
* fix a bug in which the physical matrix did not match the physical layout. Top row was missing 1 key and bottom row had 1 extra key
* amend keymap to account for the new physical matrix
* 6.25u space bar is actually supported, so add a new layout that supports this
* fix keymap readme to no longer need the cautionary warning
* Moving sentraq keyboards to sentraq subdirectory.
* Updating readme markdown to correct make commands.
* Updating s60_x references to point to the new vendor subdirectory.
* Fixed stripped spaces in markdown.
* Updated help information in s60_x readme and linked to additional documentation.
* Make QMK Configurator work with e7-v1
This adds the missing info.json file for the e7-v1 keyboard which I
forgot to add to the original PR.
This allows to see the correct layout in QMK Configurator.
* Fix the ISO layout
The ISO layout has one extra key (hash/tilde) on row 3 right before
the enter key.
The e7-v1 PCB has this key wired at the same switch as the ANSI
backslash (since this switch is not used in ISO).
The tkl_ansi layout had an incorrect value for the grave/tilde key, and
number row keys were misnumbered. This fix removes the typo and adds the
missing K1C key.
* Fix mixed tabs and spaces in adb_usb and m0110_usb makefiles
* Fix typos in converter build options
* Tweak ordering and spacing in converter makefiles
* initial commit
* Do a nice write up for readme
* establish switch matrix and physical layout
* Put in the pins that are used
* QMK configurator support and keymap
* set bootloader to caterina because pro micro boohoo
* add ortho_4x4 support for user spaces
* got the columns reversed lol
* Tweaks to default 1up60hte layout + support for HHKB style layout
* Added changes to layouts
* Fix config.h
* Fixed errant KC_NO in layout
* Added readme to keyboard... Will update with images/store link when avail.
* Update to use LAYOUT_60_hhkb default layout
* md formatting fix
* Update keyboards/1upkeyboards/1up60hte/readme.md
Co-Authored-By: bubnick <bubnick@users.noreply.github.com>
* Update keyboards/1upkeyboards/1up60hte/readme.md
Co-Authored-By: bubnick <bubnick@users.noreply.github.com>
* Added layout to rules.mk, fixed layout to be compatble with community HHKB keymaps
* Create ISO HHKB keymapping for GH60
* Add media controls to Fn layer
* Use M(x) instead of F(x), add Copyright text
* Add README for additional information about TMO50 features/quirks
* Add indicator LED code
* Move indicator code to tmo50.c
* move over kbd19x into the kbdfans directory
* move over kbd4x into the kbdfans directory
* move kbd66 into the kbdfans directory
* move the kbd6x into the kbdfans directory
* move kbd8x into the kbdfans directory
* move kbd75 into the kbdfans directory
* move kbd67 into kbdfans directory
* add a fairly sparse readme for kbdfans directory
* update make instructions for keyboards and add the Complete Newbs Guide to readmes that was missing it
* get kbd75 compiling again
* remove repetitive #defines of KC_NO and KC_TRNS when QMK_KEYBOARD_H is already included in KBD75
* add links to kbdfans readme
* fix some readme formatting
* there is no reason to have two different keymaps with such a small difference, condensing to one
* turning on backlights by default
* enable backlight by default for kbd66
* noticed that the kbd75 had caps lock led code in every keymap. Moved it out to the keyboard.c so everyone can partake.
* Update keyboards/kbdfans/kbd66/readme.md
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* update readme link ordering
* Added QMK Config for Sentraq Number Pad keyboard.
* Sentraq Number Pad documentation cleanup.
* mend
* Added json for configurator.
* Small documentation tweaks.
* Updated the layouts to use the default layouts that match.
* Uncommended user level functions in keymap, left custom keycode/macro code commented but documented why.
* Switched to #pragma once from #ifndef structure in header file.
* Moved Sentraq number pad to sentraq creator directory.
* Renamed sentraq_number_pad to number_pad now that it's nested in the sentraq directory.
* Updated references inside the files for the keyboard rename and nesting.
* Adds keymaps for muzfuz
* Remove unused keys from adjust layer
* Bring in line with current QMK standards.
* Adds Preonic and adjusted Planck keymaps
* Make changes per review request
* update reset sequence info
* fix my rgb underglow led number flub
* add a more sensible keymap
* add caps lock led support
* remove unused #define
* swap the spacebar sizes around to match the space65
* use vomindoraan's suggestion in PR to use IS_LED_ON
* 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
* added numpad and tweaked bottom row
* updated xd75 and preonic rev3 keymaps
* added initial half n half files
* fixed .h file
* updated names
* fixed layout in halfnhalf.h
* fixed manu name, changed bootloader in rules.mk
* removed redundancies in preonic and xd75 layouts
* readme updated
* initial commit
* get rid of vanilla code, and fix formatting
* write up a nice looking readme
* add in pins and enable features
* define keymap and switch/physical matrix
* add QMK Configurator support
* switch to bootmagic lite to decrease file size
* Move boards to cannonkeys and share resources
* Share common files between cannonkey boards
* Fix ortho60 keymap
* update LED numbers
* Add RGB keys to Ortho60 and Ortho48
* Add Backlight control to default layout Ortho60 and 48
* Remove unnecessary ws2812.c SRC from rules.mk
* Make Default standard layout
Move Mac OS layout to a separate layout. Basically Mac has the Alt and GUI keys swapped
* Fix typos
* Use Bootmagic keys instead of separate MacOS keymap
* Create ISO HHKB keymapping for GH60
* Add media controls to Fn layer
* Use M(x) instead of F(x), add Copyright text
* Add README for additional information about TMO50 features/quirks
* handwired/space_oddity: refactor
- config.h: updated to use #pragma once include guard
- rules.mk: replace `?=` with `=`
- space_oddity.h:
- updated to use #pragma once include guard
- layout macro KEYMAP renamed to LAYOUT
- default keymap:
- updated to use #include QMK_KEYBOARD_H
- replace references to Planck keycodes
- replace fn_actions-powered layer switch keycode
- rebuild keymap block comments
- keymap layers now use short-form keycodes
- refactor action_get_macro keycodes into process_record_user
* handwired/space_oddity: Configurator support
* handwired/space_oddity: readme cleanup
- update readme to better conform with QMK template
- fixed the make command.
* Add the e7-v1 keyboard
The e7-v1 is a 75% keyboard made by Exclusive based on an Atmega32u4
pub with RGB lights on top and backlighting.
This PR add supports for the regular ANSI layout and ANSI split
backspace layout. No ISO yet :(
* My e7-v1 keymap
Difference from base layout:
* split backspace
* Home & End on last keys of row 0 instead of Insert/Del
* Fn is on the End key when hold
* supports both a windows/linux keymap and osx keymap
* layer change is reflected in the rgb leds of the logo
* [BACKLIGHT_CAPS_LOCK_INDICATOR] Use backlight toggling as Caps Lock LED
I've implemented this feature because S65-X doesn't have LED indicators
and the existing led_set_kb(usb_led) function try to use backlight as
indicator but that creates an inconsistency with backlight_config state.
- define `BACKLIGHT_CAPS_LOCK_INDICATOR` to enable Caps Lock indicator
using backlight (for keyboards without dedicated LED)
- Don't turn off LED indicators when suspend because backlight is
already turned off. Else led_set(0) will turn back on backlight.
- Documentation has been updated
* [BACKLIGHT_CAPS_LOCK_INDICATOR] Turn off all LED indicators except Caps Lock if BACKLIGHT_CAPS_LOCK_INDICATOR
* [BACKLIGHT_CAPS_LOCK] Rename BACKLIGHT_CAPS_LOCK_INDICATOR
* [BACKLIGHT_CAPS_LOCK] Use new IS_LED_ON method
The following layouts were being rendered with 6.75u Spacebars instead of 7u:
- LAYOUT_ansi_blocker_7u
- LAYOUT_ansi_blocker_7u_small_lshift
- LAYOUT_ansi_blocker_7u_small_bspc
- LAYOUT_ansi_blocker_7u_small_lshift_small_bspc
- LAYOUT_iso_blocker_7u
This commit corrects this issue.
Flagged by yanfali on QMK Discord.
- layout macro and keymap layers refactored to more closely resemble physical keyboard layout
- added layout mockup to alice.h
- correct info.json data (was missing a key)
* Added southpole keyboard
added southpole keyboard folder and files including keymaps folder. Keymaps have errors and will not compile yet
* Add files via upload
added manufacturer and product name and description
* Update config.h
* Add files via upload
changed formating added layer
* cleaned up files, fixed foobeard keymap, and added maker info
* fixed keymap files
* Update keyboards/southpole/keymaps/foobeard/keymap.c
Co-Authored-By: ericduns <ericduns@gmail.com>
* Update keyboards/southpole/keymaps/default/keymap.c
Co-Authored-By: ericduns <ericduns@gmail.com>
* made changes fixing outdated lines and added readme.md
* made requested changes for pr to all files
* removed vs code and added new line to southpole.h
* moved some stuff around on my iris layout, but don't expect a lot of changes in the future
* good working setup
* [keymap] some mods to my (omgvee) Helidox keymap
* updated zlant keymap with diagram
* made edites to last post
* noticed slight error in default keymap due to my own mistake. fixed to be the same as default
* fixed spacing in second base layer second row from left
* Added xealousbrown keyboard.
* Changed to pragma once in config.h
* Update keyboards/handwired/xealousbrown/rules.mk
Added bootloader.
Co-Authored-By: alex-ong <the.onga@gmail.com>
* Update keyboards/handwired/xealousbrown/config.h
Commented out IS_COMMAND() since it is already default value.
Co-Authored-By: alex-ong <the.onga@gmail.com>
* Remove duplicated or unnecessary definitions in config.h and rules.mk
* Use IS_HOST_LED_ON() macro
* Add mouse acceleration to kbd6x:konstantin keymap
* Clear and restore mods when sending macros
* Make SEND_STRING_CLEAN a config option
* Add NO_ACTION_ONESHOT to userspace config
* Add files via upload
* Changed _____ to _______ as requested to meet QMK standards.
* Added readme.md
* Removed "PERMISSIVE_HOLD" as it is no longer used.
* Additional code changes made per request
* Added # to first line and removed redundant line.
* Modified Copyright information
* Added space after # for proper formatting
* Formatting changes and additional details
* Remove unnecessary IS_COMMAND definition in clueboard/66/rev4
* Replace keyboard_report->mods with get_mods() in IS_COMMAND definitions
* Update docs to use get_mods() instead of keyboard_report->mods
* Replace keyboard_report->mods with get_mods() in tmk_core/protocol/usb_hid/test
For some reason, this occurrence used KB_LSHIFT and KB_RSHIFT, which don't exist
* Replace keyboard_report->mods with get_mods() in Massdrop keyboards (as per @patrickmt)
* Move Iris via support to Via keymap
And move it out of the main keyboard files
* Actually add via keymap folder
Because using git when you're tired is apparently a very bad idea, and you do stupid things like not running git add
* Clean up config.h file for iris via keymap
* Add default value for IS_COMMAND for COMMAND feature
* Cleanup and consistency
* Update Templates to reflect change
* Fix IS_COMMAND in template
* Fix IS_COMMAND define
* Use consistent IS_COMMAND block in templates
* Remove unnecessary `#undef IS_COMMAND` directives
* Fix compile issue on orthodox
* Reomve IS_COMMAND option for newer boards
* Remove all existing definitions of IS_COMMAND if they use default LSHIFT and RSHIFT setting
* Remove a couple of additional IS_COMMAND defines
* Remove remaining redundant IS_COMMAND definitions
* Remove #undef IS_COMMAND from orthodox:drashna and whitefox:konstantin
* Remove multiple empty lines in modified config.h files
* Update additional boards
* Reomve IS_COMMAND from newer boards
* Update Alice keyboard
* Remove IS_COMMAND from additional boards
Jan 24th edition
* Only re-enable RGBLIGHT if it was on when going to sleep
* Reformat file to follow QMK Standards
* Fix check, since this is a loop, whoops
Much thanks to @Rockman18 for catching this and posting the additional code!
* Add ability to animate arm_atsam led matrix from the center of a circle
* Make arm_atsam led matrix circular animation circular rather than obloid
* Fix indentation in tmk_core led_matrix.c
* Basic Fanoe support (no LED yet)
* Enable RGB lights
* Backlighting support
* Change to reflect Wheat Field brand of Fanoe PCB
* Hot swap variant
* Fix review comment issues
* Fix review issues
* Corrected rules.mk
* Change naming to avoid using possibly copyrighted names
* Added info.json
* Corrected manufacturer name in info.json
* Keymap updates
* Add layout for use with ws2812b and such
* Fixes based on code review
I think `quantum.h` should contain only API declarations that `quantum.c` provides externally. `rgb.h` contains function weak definitions. This should not be in `quantum.h`.
I worked on those keymap to simplify the use of 60% keyboards for
coders. Instead of trying to mimic planck, this keymap remove
raise/lower layer complexity and keep some important sign keys for coder
in the upper right side pretty much the same way as they are on a full
keyboard.
A karabiner configuration is also provided to mimic most of the keymap
features on the macbook internal keyboard for when you are forced to use
it.
* Adding documentation for the LM layer modifier.
This will hopefully clear up some of the confusion around adding this layer modifier. I struggled with this a bit as well at first.
* Removing duplicate table.
* Changed section title to `Changing Layers`
* Retain name
* Custom keymap.
* Fix magic layer, enable Unicode.
* Update README.
* Make Unicode config change keymap-local.
* Move magic to AltGr, simplifying layout.
* Changes per Drashna.
* Fix magic+esc = backtick!
* Change reset implementation per Drashna's suggestion.
* Add a few more symbols so long as the commit is open - √ℜℂℤ⊙ℚℕ and the like.
* Typo fix.
* Slight simplification, drop an extra variable.
* Added busby222 config
* Fixed bug with leftover colemak and dvorak layouts
* Fixing dumb mistake
* Minor tweaks to layout. Need to use at work tomorrow to make more adjustments
* Added mouse controls for raised layer
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Update config.h
Added mouse specific settings for smoother mouse movement (default is sort of hard to use)
* config.h cleanup
* Lowering max mouse speed (personal preference)
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Update config.h
* Update rules.mk
* Added MIDI layer
* Switched the Adjust layer to an MO call
* Update keymap.c
* Fixing bugs related to midi layer
* Changed "Caps Lock" ctrl to RCTRL for use in VirtualBox
* Added shovelpaw keyamp
* Removed deprecated QUANTUM_DIR code block
* Switched midi layer to be only active when held
* Addressing requested changes
* Removed unnecessary include statement
* initial commit
* move the original kbd67 stuff into its own directory, rev1
* get rid of vanilla cookie cutter code
* put in the switch matrix pins, backlight pin, and rgb underglow pin. Number of underglow LEDs is questionable.
* switch matrix created for hotswap
* create a basic keymap for testing
* make info.json for QMK Configurator support
* rename kbd67 due to compile error
* kbd67 generic readme file
* fix make instructions for the new rev1
* comment out unneeded rgb light #defines
* Update keyboards/kbd67/readme.md
Add an extra space for proper markdown rendering
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update keyboards/kbd67/hotswap/hotswap.h
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* Update keyboards/kbd67/hotswap/keymaps/default/keymap.c
Co-Authored-By: mechmerlin <30334081+mechmerlin@users.noreply.github.com>
* use pragma once
* proper format of MechMerlin
* Cluecard: refactor
- renamed layout macro KEYMAP to LAYOUT
- reformatted layout macro to more closely resemble physical device layout
- keymaps now use #include QMK_KEYBOARD_H
- config.h files updated to use #pragma once method
- deleted outdated QUANTUM_DIR code blocks from rules.mk files
- white space changes on rules.mk files (alignment/readability)
* Cluecard: Configurator support
* Cluecard: readme update
- added image
- updated Docs links
* Clueboard 66% HotSwap: corrected matrix and Configurator data
- removed k31 and k84 from LAYOUT
- both appear to be unsupported for this PCB according to images on clueboard.co
- updated block comment mock-ups to match changes
- rebuilt info.json file
- delete removed keys from default keymap.c
* Clueboard 66% HotSwap: readme update
- fix make example
- updated Docs links
* Clueboard 66% HotSwap: 66_ansi keymap update
Updated to use #include QMK_KEYBOARD_H
* Clueboard 60% refactor
- renamed layout macro KEYMAP to LAYOUT_all
- renamed layout macro KEYMAP_AEK to LAYOUT_aek
- removed redundant KC_TRNS definitions from keymaps
- all keymaps now use #include QMK_KEYBOARD_H
* Clueboard 17%: refactor
* Clueboard 17%: Configurator support
* Clueboard 17%: update Docs links in readme
* Cleanup the 2x1800 files
* Update Clueboard 60% to standard matrix
* Update the clueboard default keymaps
* Refresh and update clueboard 17
* Add the 66% hotswap to Clueboard's readme
* Clarify the 66% hotswap's readme
* change the image to imgur
* Update the clueboard 66 to follow modern standards
* update clueboard 66_hotswap to follow modern practices
* Move the logo to imgur
* update clueboard/card to follow modern practices
* remove clueboard/66 as a valid make target
* Address comments in #4902
* fix user keymaps after the changes
When this if statement is false, it will cause the report ID to be read as the LED state.
We already know there are two bytes in the endpoint, which is a reasonably good indicator that it contains a report ID, so we should always read both.
* Added TGR Alice keyboard support
This keyboard uses ps2avrGB firmware, so I used the same matrix
Bootmapper Client was using and was able to flash it appropriately.
* Refactor alice to use QMK core
* Fixed markdown line breaks on TGR Alice readme
* handwired/retro_refit: refactor
- retro_refit.h
- updated to use #pragma once include guard
- refactored layout macro to not auto-prepend KC_ to keycodes
- renamed to LAYOUT (from KEYMAP)
- aligned for readability
- default keymap.c
- now uses #include QMK_KEYBOARD_H
- removed unused fn_actions and action_get_macro blocks
* handwired/retro_refit: Configurator support
* handwired/retro_refit: readme update
Updated readme to format of current QMK template.
* Create ISO HHKB keymapping for GH60
* Add media controls to Fn layer
* Use M(x) instead of F(x), add Copyright text
* Create initial firmware for TMO50
* Correct year and author
* Fix repos README
* Remove unnecessary code
* Change include guard in tmo50.h
* Plain60: remove redundant include guard from plain60.h
Superseded by #pragma once.
* Plain60: add Docs links to readme file
* Plain60: Configurator support
* new hhkb keymap implementing movement layer + comfort features
* Apply suggestions from code review
Co-Authored-By: schaefer-dev <schaefer.dev@gmail.com>
* removed deprecated function action_get_macro and mousewheel configs that are no longer used
* handwired/reddot: refactor
- reddot.h
- updated to use #pragma once include guard
- renamed layout macro KEYMAP to LAYOUT
- refactored arguments to more closely resemble physical layout
- aligned for readability
- keymaps/default/keymap.c
- now uses #include QMK_KEYBOARD_H
- updated include path for keymap_french.h
- refactored to use short keycodes
- aligned for readability
* handwired/reddot: Configurator support
* handwired/reddot: readme update
- update readme to current QMK template
- add KLE permalink to my best guess at the layout
* Initial support for TKC Candybar
* Correct FN layer issue
Both shift keys were overloaded. Moved Caps Lock to FN + C.
* Update keyboard description in config.h.
* Info.json
* Update project information
* Update keyboards/candybar/readme.md
Co-Authored-By: TerryMathews <terry@terrymathews.net>
* handwired/qc60: refactor and Configurator update
- correct layout macro name (LAYOUT_ANSI_DEFAULT to LAYOUT_ansi_default)
- add layout data for remaining layout macros
- correct ISO layout macros (neither had a split left Shift)
- refactor LAYOUT_iso_alt (place KC_NUHS key on home row; consistent with LAYOUT_iso_default)
- proto.h refactored to use #pragma once include guard
* handwired/qc60: keymap refactor
- delete redundant KC_TRNS and KC_NO aliases
* handwired/qc60: readme update
- update header (made consistent with QMK template)
- update Docs links (Newbs Guide; grammar)
* handwired/ortho60: Configurator update
- correct labels for Up and Right keys
- add layout data for LAYOUT_1x2uC
* handwired/ortho60: readme update
- update readme file to use QMK template
* handwired/ortho60: deleted DEFAULT_FOLDER rule
Not needed as the keyboard currently has no revisions.
* TKC1800: refactor
- tkc1800.h
- updated to use #pragma once
- visual alignment
- update config.h files to use #pragma once
- update all keymaps to use #include QMK_KEYBOARD_H
- delete redundant mod mask, KC_TRNS, and KC_NO definitions
- reformat keymap layers for readability
- add block comment for Function layer in default keymap
- delete commented action_get_macro code blocks (deprecated function)
- update files to better conform with QMK coding conventions
- update smt keymap to use set_single_persistent_default_layer (instead of persistent_default_layer_set)
- replace instances of `?=` with `=` in rules.mk
* TKC1800: Configurator visual fixes
- correct key sizes and positioning
- reformat file so each physical key object has its own line for readability
- update and add `label` keys for readability
* TKC1800: readme update
- fix image gallery link
- update Hardware Supported and Hardware Availability lines
- update make example (add :default suffix)
- update QMK Docs links (Newbs Guide; grammar)
* Add missing semicolons to smt keymap
* Grammatical fixes for GPIO Control doc
I found the Advanced Settings section to be poorly written.
* Commit suggestions from fauxpark
* Change first instance of "microcontroller" to match suggestion
Discovered the LAYOUT_compact macro didn't compile in QMK Configurator. Realized the reason for that was that it automatically prepends `KC_` to every keycode received.
Renamed the macro to LAYOUT_kc so Configurator will ignore it.
Also changed the file to use the #pragma once include guard because I was in here anyway.
* change VENDOR_ID, PRODUCT_ID, and DEVICE_VER as step one in getting VIA support
* fix v1 product id
* VIA doesn't use the version, so we need to encode it into PRODUCT_ID
* Defined IS_(HOST_)LED_ON/OFF() and improved LED documentation
* Update docs/custom_quantum_functions.md
Co-Authored-By: DidierLoiseau <didierloiseau+github@gmail.com>
* Update docs/custom_quantum_functions.md
Co-Authored-By: DidierLoiseau <didierloiseau+github@gmail.com>
* Integrated @drashna and @fauxpark's PR comments
- changed all plurals of "LED" to "LEDs" in the file
- rewording of the note about host_keyboard_leds() vs. led_set_user()
* Update docs/custom_quantum_functions.md
Co-Authored-By: DidierLoiseau <didierloiseau+github@gmail.com>
* Eliminate separate slave loop
Both master and slave run the standard keyboard_task main loop now.
* Refactor i2c/serial specific code
Simplify some of the preprocessor mess by using common function names.
* Fix missing #endif
* Move direct pin mapping support from miniaxe to split_common
For boards with more pins than sense--sorry, switches.
* Reordering and reformatting only
* Don't run matrix_scan_quantum on slave side
* Clean up the offset/slaveOffset calculations
* Cut undebounced matrix size in half
* Refactor debouncing
* Minor fixups
* Split split_common transport and debounce code into their own files
Can now be replaced with custom versions per keyboard using
CUSTOM_TRANSPORT = yes and CUSTOM_DEBOUNCE = yes
* Refactor debounce for non-split keyboards too
* Update handwired/xealous to build using new split_common
* Fix debounce breaking basic test
* Dodgy method to allow a split kb to only include one of i2c/serial
SPLIT_TRANSPORT = serial or SPLIT_TRANSPORT = i2c will include only
that driver code in the binary.
SPLIT_TRANSPORT = custom (or anything else) will include neither, the
keyboard must supply it's own code
if SPLIT_TRANSPORT is not defined then the original behaviour (include
both avr i2c and serial code) is maintained.
This could be better but it would require explicitly updating all the
existing split keyboards.
* Enable LTO to get lets_split/sockets under the line
* Add docs for SPLIT_TRANSPORT, CUSTOM_MATRIX, CUSTOM_DEBOUNCE
* Remove avr-specific sei() from split matrix_setup
Not needed now that slave doesn't have a separate main loop.
Both sides (on avr) call sei() in lufa's main() after exiting
keyboard_setup().
* Fix QUANTUM_LIB_SRC references and simplify SPLIT_TRANSPORT.
* Add comments and fix formatting.
* Crawlpad: delete kbfirmware JSON file
* Crawlpad: refactor
- config.h and crawlpad.h updated to use #pragma once method
- layout macro renamed from KEYMAP to LAYOUT_ortho_4x4
- default keymap now uses #include QMK_KEYBOARD_H
- deleted deprecated action_get_macro function
- cleanup rules.mk file
- add LAYOUTS = ortho_4x4 to rules.mk
* Crawlpad: Configurator support
* Crawlpad: readme update
- update image link to direct link
- fully update Docs link line
- delete reference to deleted kbfirmware JSON file
* Add encoder support
* Add VIA support to Iris Rev. 3
* Update pinout and disable mouse keys to free up space
* Rollout VIA support to all Iris revisions
* Update default keymap
* Update vendor ID
* Add kbd6x:konstantin keymap
* Prevent tap dance from sending LShift as a weak mod in KBD6X
* Move config.h and rules.mk definitions into userspace
* Add UC_WIN to UNICODE_SELECTED_MODES
* Temporarily use Bootmagic until Command is fixed
* Move common behavior from keyboards into userspace
* Update kbd6x:konstantin keymap and userspace
* Make a RCTRL layer in kbd6x:konstantin
* Make KC_ESC turn off layers
* KC_ESC turns L_FN off only if it was locked on
* Add missing record->event.pressed checks
* Move numpad toggling logic into function
* Disable Bootmagic, enable KEYBOARD_SHARED_EP with Command
* Add support for THE50
A 50% custom keyboard designed and produced by LazyDesigners
* THE50 code-improvement
Implement the changes suggested by noroadsleft.
* changed ortho keymaps and userspace
* changed prime_o keymap
* changed userspace
* optimized keymaps and userspace
* removed permissive hold as it doesn't seem to do anything
* defined TAPPING_TERM in userspace config.h
* Commited into clean repo
* Gergo initial release
* Cleaning up
* Cleaning up
* Update readme.md
* Updated image, fixed MD formatting, added clairity
* Moved keymap to keyboard subdir, modified rules.mk
* Cleaned header guards
* Cleaned header guards. Read the rest of the PR comments
* Update keyboards/gergo/keymaps/default/keymap.c
Co-Authored-By: germ <jeremythegeek@gmail.com>
* Update keyboards/gergo/readme.md
Co-Authored-By: germ <jeremythegeek@gmail.com>
* Moved makefiles to keymap mod-area-thingy-with-overrides
* Update rules.mk
Slow the roll on the defaults while I wait for merge
* Update rules.mk
* Cleaning cleaning cleaning
* More housekeeping. Keeping optdefs
* moved keyboard specfic conf to config.h. Can we merge yet?
* added info.json
* Check the size of the SET_REPORT packet
If we have two bytes, that probably means the first is a report ID. The 6KRO interface may or may not have one, but the NKRO interface always does, so we need to check this regardless of whether KEYBOARD_SHARED_EP is defined.
* Fix indentation
* adds proton c base
* fixes custom matrix include
* adds readme.md
* initial proton coversion, no pin mapping
* start of mcu selection
* add pin mapping and sweet16 test
* add at90 to list
* disable backlight, fix d7
* update flag names
* doc updates
* proton c update for mcu selection
* initial prime_o commit
* Cleaned up comments, other things.
* Update bakingpy 4x12 keymap and add test mode for debugging/development (#4810)
* Keymap: ave-63's iris layout (#4812)
* Updated keymap to use standard seven-underscore KC_TRNS notation
* initial prime_o commit
* Cleaned up comments, other things.
* Updated keymap to use standard seven-underscore KC_TRNS notation
* Downbubble: Configurator fix
Fix the visual key alignment and some typos.
* Downbubble: refactor
Rename layout macros:
- LAYOUT_downbubble_standard to LAYOUT_standard
- LAYOUT_downbubble_splitbackspace to LAYOUT_split_bs
- LAYOUT_downbubble_splitrightshift to LAYOUT_split_rshift
- LAYOUT_downbubble_splitnumpad to LAYOUT_split_numpad
- LAYOUT_downbubble_spliteverything to LAYOUT_all
* Remove unused UNICODE(n) macro, update docs
* Add note about max length of unicode_map to docs
* QK_UNICODE_MAP → QK_UNICODEMAP
* Refactor process_unicode_map
* process_unicode_map → process_unicodemap
This is done for consistency: UNICODEMAP is the method (hence UNICODEMAP_ENABLE, process_unicodemap), whereas unicode_map is the mapping table itself.
* Update references and ordering in docs/understanding_qmk
* Add additional note to docs/understanding_qmk
* &unicode_map[index] → unicode_map + index
This avoids the issue of the compiler sometimes complaining about the array index being out of range
* Update docs/getting_started_make_guide
* Update method sections in docs/feature_unicode
Microsecond (us) delays are now handled by a busy wait loop according to MCU frequency. This replaces the system counter method which had an overhead of around 12us.
TC5 device and supporting routines removed as it was the old us delay counter.
wait_ms is now properly a macro to CLK_delay_ms.
wait_us is now properly a macro to CLK_delay_us.
Removed CLK_get_us as it has no use.
All calls to CLK_get_ms() have been replaced by timer_read64() with corrected typing.
All calls to CLK_delay_ms() have been replaced by wait_ms().
All calls to CLK_delay_us() have been replaced by wait_us() and timings verified or updated as needed after review on scope.
Corrected typing of variables using 64bit ms timer readings if needed.
* initial commit, this now mostly works
- RGB controls work
- Dynamic keymap still broken due to eeprom
- Via works
* STM32 eeprom update
- Update EEPROM emulation library to handle 8bit data like AVR.
- This library also allows for multiple page pairs resulting in greater EEPROM size flexibility
* hs60 changes
* HS60 hhkb added
* Update keyboards/hs60/v2/config.h
Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
* Fractal: layout macro cleanup
Removed KEYMAP alias for LAYOUT_preonic_mit. Alias was unused, and the terminology usage is deprecated.
* Fractal: readme cleanup
Updated the line containing the documentation links in the readme.
* Fractal: disable preonic_mit community layout
QMK doesn't have a preonic_mit community layout at this time.
Disables preonic_mit as an option for community layout. Can be re-enabled when the layout is added.
* Numbrero: fix Configurator mismatch
Key object order in info.json didn't match the layout macro, leading to keys being assigned out-of-sequence.
* Numbrero: tidy
- white space changes in numbrero.h (alignment/readability/QMK conventions)
- minor changes to readme.md (grammar, mostly)
* Tradestation: tidy code
- correct JSON syntax on info.json
- visual key alignment on info.json
- white space changes on rules.mk and tradestation.h (readability/QMK conventions)
* Tradestation: readme refactor
Modify readme.md to more closely match QMK template.
* Tradestation: readme update
Update The Board podcast link for libsyn.
* S65-X: remove S65-Plus support
The original QMK codebase for the Sentraq S65-X actually supported both the S65-X and the S65-Plus. In the interim, the S65-Plus has been broken off into its own directory.
This commit removes support for the S65-Plus from the `keyboards/s65_x/` directory, as that code has been superseded by the code in the S65-Plus directory (`keyboards/s65_plus/`).
- deleted S65-Plus layout macros from s65_x.h and info.json
- deleted s65plus keymap directory
- removed references to the unused column pins
- removed the two unused columns for the switch matrices
- renamed switch K300 in LAYOUT_ansi to K301 (reflects matrix position)
- renamed switch K214 in LAYOUT_iso to K114 (reflects matrix position)
* S65-X: keymap refactor
- all keymaps now use #include QMK_KEYBOARD_H
- default and iso keymaps refactored for readability
- deleted redundant KC_TRNS and KC_NO keycode definitions from smt keymap
* S65-X: readme update
- updated Hardware Availability link
- updated Docs links
* S65-Plus: add LAYOUT_iso data
Adds LAYOUT_iso macro to s65_plus.h and info.json, and an ISO layout version of the default keymap.
* S65-Plus: refactor default keymap
- refactor for alignment/readability
- removed fn_actions code block
- add empty process_record_user block
* S65-Plus: readme update
- Hardware Availability link is now a hyperlink
- updated Docs links
* S65-X: enable 65_ansi and 65_iso community layouts
Thi commit allows the Sentraq S65-X to use the 65_ansi and 65_iso community layouts.
- LAYOUT_ansi renamed to LAYOUT_65_ansi
- LAYOUT_iso renamed to LAYOUT_65_iso
- added LAYOUTS rule to rules.mk
* Remove QUANTUM_DIR code blocks from keyboard rules
This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files that affect entire keyboards.
* remove QUANTUM_DIR code blocks from rules for default keymaps
This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files that affect default keymaps.
* remove QUANTUM_DIR code blocks from rules for user keymaps
This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files that affect "user" keymaps. (It's actually any keymap
that isn't named `default`.)
* remove QUANTUM_DIR code blocks from rules for community layouts
This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files for community layouts.
* remove QUANTUM_DIR code blocks from rules for userspaces
This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files for userspaces.
* Use standard KC_ALGR, remove language-specific redefinitions
* Use ALGR instead of ALTGR in BÉPO and Canadian multilingual keymaps
* Remove BE_LALT, BE_LGUI aliases
* adding default settings to support 3v ERM vibration motors
* set default settings of haptic motor for LV061228B-L64-A 2v LRA
* update ishtob keymap and fix config settings
* 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
* Pushing local updates
* Reverting .vscode/settings.json
* Adds pretty_osx and _win wrappers
* Utilize Windows and Mac Wrappers
* Update layouts/community/ergodox/bocaj/keymap.c
* Updates to Bocaj keymap.c
- Extended pretty_osx and pretty_win wrappers to allow modification of the bottom rows and thumb clusters.
- Fixed already wrapped layouts to align with the change
- Wrapped _NUMS and _CLICKY layers with the _osx wrapper because I main with a Mac
* Updates to Bocaj
Small documentation updates, added KC_MAKE from Drashna's layout, added KC_LOCK back to the diablo layer.
* Add LShift to _Adjust layer
* Minor changes to bocaj
Put wrappers in userspace and added RESET keycode to the Adjust layer
* Updates to Bocaj config & keymap; Fixed problem with process_leader.c
- Made lots of changes to the bocaj layout and userspace
- Pulled in latest upstream/master
- Attempted to compile with latest and found an unneccessary `break` in process_leader.c
* Bocaj - Updates to Layout and Userspace
* Adjust LEADER_TIMEOUT to 350
* Put KC_GRAVE on _ADJUST layer
* Eliminate _LOWER layer and associated definitions
* Adjusted layer indicating LEDs to match changes
* Fixed Diablo leader sequence
* Added build info leader sequence
* Got rid of obsoleted IGNORE_MOD_TAP_INTERRUPT/PERMISSIVE_HOLD/PREVENT_STUCK_MODIFIERS (may add STRICT_LAYER_RELEASE in the future)
* Remove type_traits
Not sure what in my VSCode config always brings this one in
* refactor stage 1
* Bocaj Refactor Phase II
* Made LED_2 brighter if both CTRL & GUI are being held
* Enabled unicode because I got it to work in Mac OS
* Finalized Build Info leader combination after testing in Mac OS
* Not sure why KC_D3_1 was set to ASDF if !TAP_DANCE_ENABLE. So I changed that back
* Experienced issues with `EXTRAFLAGS += -flto` using Docker in MacOS. Not sure what it does, but I don't seem to be missing anything
* Wrote obligatory readme.md files and mentioned Drashna too many times... I don't think I can actually take credit for much of anything here.
* Updates to Bocaj
Made LED changes, added LM_DFLT which is similar to the grave macro, enabled retro tapping, working on a unicode idea -- currently fails to build.
* Bocaj Refactor Phase 3 Part 2
- Continuation of implementing unicode switching based on default layer
- Slight adjustments to _DIABLO and base wrapper because LM_DFLT macro didn't function as I'd hoped
* Slight adjustment to KC_MAKE
* Added my Mechmini2 layout to qmk.
* Added more info to the readme.
* Made changes.
* Update keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c
Co-Authored-By: lbibass <ewdries02@gmail.com>
* Update keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c
Co-Authored-By: lbibass <ewdries02@gmail.com>
* Added brightness and volume controls to MechMini 625 layout.
* Make CRKBD keylogger output actually show tap keys
* check MT/LT for twinkling
* Add ortho 5x12 support for fractal keyboard
* Use newer interface for setting pins/ports
* Remove custom unicode methods
* Reomve unicode input info
* Odd rules issue
* Redefine REST note to be more pleasing
* Properly disable PM LEDs with GPIO commands
* Update gitlab CI yaml file
* Remove extra mod tap check
* Remove initial state on ergodox glow
* Rev6 Cleanup
* Fix KC_MAKE macro
* Update GitLab CI yaml file
* More GitLab CI changes
* One final GitLab CI change
* Remove unneeded unicode support
* Optimize KC_MAKE
* Change rgblight_get_mode's return type to uint8_t.
Since rgblight_get_mode() is just returning rgblight_config_t.mode,
it should match rgblight_config_t.mode's type: uint8_t.
* Update rgb_matrix_get_mode to return uint8_t.
It seems the led_mask is set incorrectly on the WhiteFox meaning that
the LED at C9-1 (the space bar) doesn't get lit. I can't see any reason
for this to be intentional so I am pretty sure it's a typo. At the very
least it fixes the space bar LED for me.
* Add my zeal60 keymap
* Temporarily remove failing community layout from zeal60 make rules
* Revert "Temporarily remove failing community layout from zeal60 make rules"
This reverts commit ffd0018fb1.
* refactored cyclops keyboard project
Moved the files into a subfolder to allow consistency in preparation for additional commits to come in the future.
made some small adjustments to the configuration and keymap
* Update keyboards/westfoxtrot/cyclops/keymaps/default/keymap.c
Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>
* Update keyboards/westfoxtrot/cyclops/readme.md
Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>
* Update keyboards/westfoxtrot/cyclops/readme.md
Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>
* Update keyboards/westfoxtrot/cyclops/readme.md
Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>
* Keep pressed keys on layer state change
* Add doc comment for clear_keyboard_but_mods_and_keys
* Keep pressed keys only if PREVENT_STUCK_MODIFIERS is on
* Check STRICT_LAYER_RELEASE instead of PREVENT_STUCK_MODIFIERS
* Update feature_advanced_keycodes.md
Probably a better way to word it, but I've solved this issue on reddit several times, had to solve this for friends, ect. It's something worth being in the docs as it's a common issue, and not always intuitive. I have offered this change as I was told by several people "It was never mentioned in the docs".
* Update feature_advanced_keycodes.md
Clear up what was meant to be said.
* Change spaces to tabs on two lines
The rest of the file uses tabs
* Read user input in a non-terrible, non-hacky way
* Remove unnecessary tee call
* read -p is not POSIX
* Add missing $ to echo GENTOO_WARNING
* Replace non-POSIX echo -n with printf
* Use cd ... || exit 1 in case git clone fails
* Add missing sudo
Thanks @snortwolf
* Undo replacing tee with >>
* XMMX: matrix and keymap refactor
- xmmx.h updated to use #pragma once
- renamed LAYOUT_ansi_wk macro to LAYOUT_tkl_ansi
- renamed LAYOUT_ansi_wkl macro to LAYOUT_tkl_ansi_wkl
- renamed LAYOUT_iso_wk macro to LAYOUT_tkl_iso
- renamed LAYOUT_iso_wkl macro to LAYOUT_tkl_iso_wkl
* XMMX: Configurator support
* XMMX: readme update
* Add support for reset to bootloader
Chibios_test/STM32_F072_ONEKEY wouldn't reset to bootloader on a
compatible Discovery board because the Chibios library board file was
lacking the __early_init(void) function necessary to read the magic key.
Borrowed code from Clueboard 60, tested working.
* Remove board.chcfg
* Add provisional Helix implementation to test the quantum/split_common.
* copy keyboards/helix/serial.[ch] to quantum/split_common/
* Make serial.c a pure driver.
Remove buffer name and buffer size from serial.c. They should be placed in the caller(matrix.c, split_utils.c).
* remove quantum/split_common/serial_backward_compatibility.h
* Changed array serial_master_buffer to structure serial_m2s_buffer.
* Changed array serial_slave_buffer to structure serial_s2m_buffer.
* Change keyboards/miniaxe/matrix.c
I also made changes to quantum/split_comon/matrix.c to keyboards/miniaxe/matrix.c.
Note: I contacted @ka2hiro, creator of miniaxe, and I got permission to change keyboards/miniaxe/matrix.c.
* update history comment in quantum/split_common/serial.c
* Revert "Add provisional Helix implementation to test the quantum/split_common."
This reverts commit 168c82ef82.
* fix keyboards/miniaxe/matrix.c, quantum/split_common/matrix.c
avr-gcc 4.9.[23] report error.
avr-gcc 5.4.0, avr-gcc 7.3.0 pass.
It is funny.
* update comment quantum/split_common/serial.c
* Reserve RGBLIGHT_SPLIT macro in quantum/split_common
* initial commit for Othi's HHKB layout keymap,
covering multiple modifiers hold and vim-like support and german characters. If there's
any suggestion i can be reached via mnpqraven on github or Othi#6661 on
discord
* added readme.md. TODO: update readme.md
* changed to default quantum keycode for `KC_TRNS`,
removed `PREVENT_STUCK_MODIFIERS`,
fixed tap dance using one shots
TODO: unicode implementation at https://docs.qmk.fm/#/feature_unicode
* keymap documentaion(readme) added
* unicode init
TODO: figure out what made the compose sequence not running
* update unicode and readme
* JD40: default keymap refactor
- Removed redundant action_layer.h include
- Refactored to use LAYOUT macro (from LAYOUT_kc)
- Refactored to use QMK-native keycodes
- Removed superseded TMK code blocks
* JD40: readme cleanup
Fixed and updated the links in the readme file
* Infinity60: refactor
- infinity60.h / keymap.c
- renamed layout macro to LAYOUT_60_ansi_split_bs_rshift; removed layout macro alias
- updated to #pragma once
- keymaps now use #include QMK_KEYBOARD_H
- keymaps/jpetermans/config.h updated to #pragma once
- keymaps/jpetermans/rules.mk deleted (complete contents were deprecated make instructions)
* Infinity 60%: Configurator support
* Infinity60: readme update
Updated the Docs links.
* Infinity60: bugfix depariel keymap
Had a typo.
* Infinity60: edit matrix.c
per @drashna
- https://github.com/qmk/qmk_firmware/pull/4707#issuecomment-449540676
* Fix up process_leader to be a bit more optimized
* Process dual function keys better
* Make leader start a callable function
* Fix per key timer call location
* Add escape if already leading
* Return false for KC_LEAD
* Add documentation
* add some comment about Helix customize and auto-setup RGBLIGHT_LIMIT_VAL
* add define USB_MAX_POWER_CONSUMPTION
* Helix keyboard OLED, RGBLIGHT enable/disable control integrate into rules.mk
rules.mk: add 4 Variables for compile control.
# Helix keyboard customize
# you can edit follows 4 Variables
# jp: 以下の4つの変数を必要に応じて編集します。
OLED_ENABLE = no # OLED_ENABLE
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
config.h: auto set RGBLED_NUM by HELIX_ROWS and rules.mk's define
* HELIX_ROWS define move from config.h to rules.mk
* add readme.md
* rename readme.md to readme_jp.md
* add readme.md and modify readme_jp.md
* change helix/ssd1306.c for select glcdfont.c position
* add variable LOCAL_GLCDFONT into each keymaps rules.mk
* Add iPhone/iPad LED support to Helix default keymap
* renumber _ADJUST for shrink program size
* Fix Helix i2c wrong bit rate
* add helix serial debug code
* serial debug macro move from config.h to serial.h
* helix serial.c debugging...
* refine debug macros
* add some comments
* add SELECT_SERIAL_SPEED
* add comments
* debugging sync_send/sync_recv
* add very high speed
* fix sync_send/sync_recv
* fix com. start and switch send/recv
* debug mode off
* remove debug codes
* temporary change, compiling C, C++ and ASM without -g
* helix config.h refine
* Revert "temporary change, compiling C, C++ and ASM without -g"
This reverts commit e9730cbbfd.
* add change_reciver2sender()/change_sender2reciver()
This is a change to improve readability.
* txled, rxled off in matrix_init()
* add serial_send_packet() / serial_recive_packet()
This is a change to reduce object size.
* add serial_low() at ISR() top
* add __attribute__((always_inline)) to some functions
* modify serial_send_packet()/serial_recive_packet()
A little, object size reduction.
A little, speedup.
* add debug code to helix/serial.c
* Adjust sampling timing of serial signal being received
* add split_scomm.c/split_scomm.h and change serial.c/serial.h
serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.
* add split_scomm.c/split_scomm.h into helix/rev1
* reduce object size helix/rev2/matrix.c
* remove checksum check, add parity check
* force occur parity error for test
* parity test ok. remove test code
* change some comment & add skip code when buffer_size == 0
* serial.c: multiple types of transaction support
Add 4 bits transaction-type field at packet top.
Select Transaction Descriptor Table entry by transaction-type.
* helix serial master-slave transaction optimize
Using multi-type transaction feature of serial.c, communication contents between master slaves were optimized.
* add debug code for retry
* add comment into each config.h
* fix ISR status drop
* add a debug macro 'debug_retry_chg()'
* reduce led_test size
* remove debug code from helix/serial.c and etc.
* helix:five_rows change TAPPING_TERM value 140
* Improved compatibility with let's split of serial.c. Finish helix/serial.c improvement.
- The difference with the original let's split's serial.c
- It's high-speed about 4 times.
- Stable bi-directional data transfer. (Helix need master to slave transfer)
- serial.h was divided 2 files, serial_config.h and sereial.h
- With multiple types of transaction support, communication contents can be optimized. (NEW flexible API)
- USE OLD Simple APIs (compatible with let's split serial.c)
- files :
- serial_config.h -- hardware configuration (need include by config.h)
- serial.c/serial.h -- serial communication
- USE NEW flexible APIs. (Support multi-type transaction function.)
serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.
- files
- split_scomm.c -- communication buffer is defined in here. call by matrix.c.
- split_scomm.h -- buffer size is defined in here. include by matrix.c, split_util.c
- serial_config.h -- hardware configuration (need include by config.h)
To use the NEW API, specify #define SERIAL_USE_MULTI_TRANSACTION
- serial.c/serial.h -- serial communication lower layer
- NEW APIs for serial.c / serial.h (The lower layer)
// Soft Serial Transaction Descriptor
typedef struct _SSTD_t {
uint8_t *status;
uint8_t initiator2target_buffer_size;
uint8_t *initiator2target_buffer;
uint8_t target2initiator_buffer_size;
uint8_t *target2initiator_buffer;
} SSTD_t;
// initiator is transaction start side
void soft_serial_initiator_init(SSTD_t *sstd_table);
// target is interrupt accept side
void soft_serial_target_init(SSTD_t *sstd_table);
int soft_serial_transaction(int sstd_index);
int soft_serial_get_and_clean_target_status(int sstd_index);
- NEW APIs for split_scomm.c / split_scomm.h (The upper layer)
move from old serial.c the following buffer and functions
serial_slave_buffer[]
serial_master_buffer[]
void serial_master_init(void)
void serial_slave_init(void)
int serial_update_buffers(void)
define SERIAL_xxxxx_BUFFER_LENGTH move from serial_config.h to split_scomm.h
* fix comment typo
* Fix the value of helix:five_rows variable HELIX_ROWS to 5.
* led_test rules.mk some change
* Separate common parts of helix/rev2/keymaps/*/rules.mk into helix/rev2/keymaps_common.mk
* helix/rev2/keymaps/edvorakjp/rules.mk use helix/rev2/keymaps_common.mk
* Separate common parts of helix/pico/keymaps/*/rules.mk into helix/pico/keymaps_common.mk
* Helix each keymap's using rgblight mode symbol instead magic number
No change in build result.
* Helix pico keymaps: make rgblight modes selectable.
No change in build result.
* Helix rev2 keymaps: make rgblight modes selectable.
No change in build result.
* fixed Helix froggy/keymap.c: invalid rgblight mode value 0 to 1 (=RGBLIGHT_MODE_STATIC_LIGHT)
* Deselect RGB_TEST and ALTERNATING in Helix rev2,pico keymaps config.h.
* Merge branch 'master' of https://github.com/qmk/qmk_firmware
* revert 955dcbc
* delete keymaps_common.mk
* add LAYOUT_kc() to keyboards/helix/pico/pico.h
* Standardize the Unicode EEPROM code
* Remove unicode init from process_record_* functions
* Add unicode init to where it belongs: matrix_init_quantum
* Move Unicode proccessing to unicode common
* Add audio feedback to input mode keys to drive konstantin up a wall
* Tap_code cleanup
* Update keycodes
* Update unicode documentation
* Update unicode keycodes for consistency/easier merge
* Add Audio Feedback section
* Remove Functions from feature page
And link to the file instead. Link to specific lines later on.
* Fix spacing
Co-Authored-By: drashna <drashna@live.com>
* Because I missed it!
Co-Authored-By: drashna <drashna@live.com>
* Fix spacing
Co-Authored-By: drashna <drashna@live.com>
* SPAAAAAAAAAACing
Co-Authored-By: drashna <drashna@live.com>
* Add BSD for future compatibility
* Thought I fixed that!
Co-Authored-By: drashna <drashna@live.com>
* non-breaking
Co-Authored-By: drashna <drashna@live.com>
* Considered that
Co-Authored-By: drashna <drashna@live.com>
* Yuuup
Co-Authored-By: drashna <drashna@live.com>
* consistency
Co-Authored-By: drashna <drashna@live.com>
* white spaces .... copied from elsewhere
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* Update keycode defines
* Fix Linux Song
* Update all of the songs
* Cleanup
* Move and update check to ensure only one unicode method is enabled
* Update quantum/quantum_keycodes.h
* Update documentation
* Wordsmithing and cleanup
* Format unicode_common (#13)
* case alignment
* process_record_unicode_common → process_unicode_common
* Move song arrays into function where they're used, align preprocessor directives
* Swap the order of UC_WIN and UC_BSD
* Update Unicode docs
* Reorder Unicode mode stuff to match the order of input mode constants
* Fix capitalization in doc subtitle
* Readd BSD and OSX_RALT songs
* Reword BSD note in docs
* Readd BSD keycode description
* Reword explanation of input on different platforms
* Steal vomindoraan's input mode documentation
Co-Authored-By: vomindoraan (vomindoraan@gmail.com)
* Willingly give Drashna the rest of my Unicode doc improvements
* Wordsmithing
Co-Authored-By: drashna <drashna@live.com>
* remove merge artifacts
* Unicode common cleanup (#17)
* Standardize the Unicode EEPROM code
* Remove unicode init from process_record_* functions
* Add unicode init to where it belongs: matrix_init_quantum
* Move Unicode proccessing to unicode common
* Add audio feedback to input mode keys to drive konstantin up a wall
* Tap_code cleanup
* Update keycodes
* Update unicode documentation
* Update unicode keycodes for consistency/easier merge
* Add Audio Feedback section
* Remove Functions from feature page
And link to the file instead. Link to specific lines later on.
* Fix white spaces
Co-Authored-By: drashna <drashna@live.com>
* Fix spacing
Co-Authored-By: drashna <drashna@live.com>
* Because I missed it!
Co-Authored-By: drashna <drashna@live.com>
* Fix spacing
Co-Authored-By: drashna <drashna@live.com>
* SPAAAAAAAAAACing
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* Add BSD for future compatibility
* Thought I fixed that!
Co-Authored-By: drashna <drashna@live.com>
* non-breaking
Co-Authored-By: drashna <drashna@live.com>
* Considered that
Co-Authored-By: drashna <drashna@live.com>
* Yuuup
Co-Authored-By: drashna <drashna@live.com>
* consistency
Co-Authored-By: drashna <drashna@live.com>
* white spaces .... copied from elsewhere
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* Update keycode defines
* Fix Linux Song
* Update all of the songs
* Cleanup
* Move and update check to ensure only one unicode method is enabled
* Update quantum/quantum_keycodes.h
* Update documentation
* Wordsmithing and cleanup
* Format unicode_common (#13)
* case alignment
* process_record_unicode_common → process_unicode_common
* Move song arrays into function where they're used, align preprocessor directives
* Swap the order of UC_WIN and UC_BSD
* Update Unicode docs
* Reorder Unicode mode stuff to match the order of input mode constants
* Fix capitalization in doc subtitle
* Readd BSD and OSX_RALT songs
* Reword BSD note in docs
* Readd BSD keycode description
* Reword explanation of input on different platforms
* Steal vomindoraan's input mode documentation
Co-Authored-By: vomindoraan (vomindoraan@gmail.com)
* Willingly give Drashna the rest of my Unicode doc improvements
* Wordsmithing
Co-Authored-By: drashna <drashna@live.com>
* Rearrange process_unicode_common functions
* Make Unicode input mode constants (UC_*) an enum
* Simplify unicode_input_start/finish code
* Make the key used for WinCompose configurable
* Remove UC_OSX_RALT in favor of setting the key with UNICODE_OSX_KEY
* Update Unicode input mode doc
* Add descriptions and rearrange definitions in process_unicode_common.h
* Add registry command to Unicode docs + misc updates
* Reword an explanation in Unicode docs
* Add TODO comment
* Remove trailing whitespace
* Improve Cycling documentation
* Add Unicode Input method Cycling support (#19)
* Standardize the Unicode EEPROM code
* Remove unicode init from process_record_* functions
* Add unicode init to where it belongs: matrix_init_quantum
* Move Unicode proccessing to unicode common
* Add audio feedback to input mode keys to drive konstantin up a wall
* Tap_code cleanup
* Update keycodes
* Update unicode documentation
* Update unicode keycodes for consistency/easier merge
* Add Audio Feedback section
* Remove Functions from feature page
And link to the file instead. Link to specific lines later on.
* Fix white spaces
Co-Authored-By: drashna <drashna@live.com>
* Fix spacing
Co-Authored-By: drashna <drashna@live.com>
* Because I missed it!
Co-Authored-By: drashna <drashna@live.com>
* Fix spacing
Co-Authored-By: drashna <drashna@live.com>
* SPAAAAAAAAAACing
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* Add BSD for future compatibility
* Thought I fixed that!
Co-Authored-By: drashna <drashna@live.com>
* non-breaking
Co-Authored-By: drashna <drashna@live.com>
* Considered that
Co-Authored-By: drashna <drashna@live.com>
* Yuuup
Co-Authored-By: drashna <drashna@live.com>
* consistency
Co-Authored-By: drashna <drashna@live.com>
* white spaces .... copied from elsewhere
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* white spaces
Co-Authored-By: drashna <drashna@live.com>
* Update keycode defines
* Fix Linux Song
* Update all of the songs
* Cleanup
* Move and update check to ensure only one unicode method is enabled
* Update quantum/quantum_keycodes.h
* Update documentation
* Wordsmithing and cleanup
* Format unicode_common (#13)
* case alignment
* process_record_unicode_common → process_unicode_common
* Move song arrays into function where they're used, align preprocessor directives
* Swap the order of UC_WIN and UC_BSD
* Update Unicode docs
* Reorder Unicode mode stuff to match the order of input mode constants
* Fix capitalization in doc subtitle
* Readd BSD and OSX_RALT songs
* Reword BSD note in docs
* Readd BSD keycode description
* Reword explanation of input on different platforms
* Steal vomindoraan's input mode documentation
Co-Authored-By: vomindoraan (vomindoraan@gmail.com)
* Willingly give Drashna the rest of my Unicode doc improvements
* Wordsmithing
Co-Authored-By: drashna <drashna@live.com>
* Rearrange process_unicode_common functions
* Make Unicode input mode constants (UC_*) an enum
* Simplify unicode_input_start/finish code
* Make the key used for WinCompose configurable
* Remove UC_OSX_RALT in favor of setting the key with UNICODE_OSX_KEY
* Update Unicode input mode doc
* Add descriptions and rearrange definitions in process_unicode_common.h
* Add registry command to Unicode docs + misc updates
* Reword an explanation in Unicode docs
* Add TODO comment
* Add cycle_unicode_input_mode and UNICODE_SELECTED_MODES macro
* Add an option for making cycle changes persistent
* Add debug prints to functions that change input_mode
* Use cycle_unicode_input_mode in whitefox/konstantin
* Add persist_unicode_input_mode function
* Add offset to cycle to allow stepping in reverse
* Add keycodes: UNICODE_MODE_FORWARD, UNICODE_MODE_REVERSE
Aliases: UC_MOD, UC_RMOD (respectively)
* REVERT ME: Undo changes to whitefox/konstantin to avoid conflicts
* Fix wrong constant name
* Revert "REVERT ME: Undo changes to whitefox/konstantin to avoid conflicts"
This reverts commit 42676bf251.
* Change dprintf text
* Give selected modes priority over EEPROM when !UNICODE_CYCLE_PERSIST
* Remove trailing whitespace
* Cleanup of RALT code and unicode compilation stuff
* Remove else for unicode handling
* Espectro: layout macro refactor
- updated to #pragma once method
- restructure LAYOUT_all data as block comment
- Configurator was reading the LAYOUT_all macro even though it was commented out.
- updated all keyswitch arguments to use K<ROW><COLUMN> notation
- add LAYOUT_iso macro
- add info.json file for Configurator support
* Espectro: keymap refactor
- deleted unused MODS_CTRL_MASK definitions
- iso keymap refactored to use LAYOUT_iso macro
- default and iso keymaps refactored for readability
* A Planck style keymap with iris flair
- Re-arrange layers to be more planck like.
- move backspace to right thumb
- replace backspace with minus, more useful for coding
- replace center keys with brackets
- MT(MOD_LCTRL and ESCAPE)
- Use QMK-DFU for bootloader
- add a soft reset to keymap
* Feedback from reviewers
- remove redundant define (noroadsleft)
- remove unused layer switch case (drashna)
* Adding ortho60 to handwired
* update to use LAYOUT_ortho_5x12
* Address PR comments about layout macros
* Add default layout to info.json for configurator
* Hack to xyverz layout until RGB branch is merged
* Fix undef RGBDIPIN in xyverz 12x5 layout
* Revert change to xvyerz's layout
* Fix typo
* Fix order
* Revert xyverz rules.mk
* ErgoInu: Configurator update, part 1
Give each key its own line to make the file easier to debug.
* ErgoInu: Configurator update, part 2
- converted all JSON variables to lowercase (this was the bugfix)
- converted Tabs to Spaces
* ErgoInu: Configurator update, part 3
- break key data into chunks
* ErgoInu: Configurator update, part 4
Rebuilt the layout tree into a new file, taking the Y values from the original data. Copied relevant data from original file into the new file, and then overwrote the original file.
* Cospad: Configurator update
- added LAYOUT_gamepad_6x4 data
- renders as 4 rows by 6 columns visually
- fixed LAYOUT_numpad_6x4 data
- JSON objects were in the wrong order
* Cospad: readme update
- markdown formatting fixes
- made Hardware Availability address a hyperlink
- updated Docs links
* converter/ibm_5291: Configurator support
- added layout data to info.json file
- corrected keyboard_folder value
* converter/ibm_5291: readme cleanup
- Fixed "image" url (target of link was a web page; changed markdown formatting to text link)
- Sentence capitalization fixes
- markdown formatting fixes for readability
* Layout macro refactor
- Renamed KC_KEYMAP to LAYOUT_kc
- Renamed KEYMAP to LAYOUT
- moved LAYOUT above LAYOUT_kc (Hoping this encourages users to use LAYOUT.)
- updated layout macro name in info.json
- white space changes for readability
* Keymap refactor: default
Default keymap now uses `#include QMK_KEYBOARD_H` and LAYOUT macro (from KC_KEYMAP/LAYOUT_kc). Keymap was also refactored to use process_record_user function instead of deprecated action_get_macro from TMK.
Also moved LONGPRESS_DELAY and LAYER_TOGGLE_DELAY definitions to config.h.
* Keymap refactor: dcompact
- Changed chimera_ortho.h include for QMK_KEYBOARD_H
- Updated layout name on keymap layers
* Coding conventions fix in default keymap
* Keymap refactor: gordon
- Changed chimera_ortho.h include for QMK_KEYBOARD_H
- Removed redundant includes of action_layer.h and process_tap_dance.h (superseded by QMK_KEYBOARD_H)
- Removed redundant definitions for KC_NO and KC_TRNS
- Updated layout name on keymap layers
* add temporary compile test shell script
* Extended support of SKIP_VERSION to make invariant compile results during testing.
* build_keyboard.mk, tmk_core/rules.mk: add LIB_SRC, QUANTUM_LIB_SRC support
Support compiled object enclosed in library.
e.g.
```
LIB_SRC += xxxx.c
xxxx.c --> xxxx.o ---> xxxx.a
```
* remove 'ifdef/ifndef USE_I2C' from quantum/split_common/{i2c|serial}.c
* add SKIP_DEBUG_INFO into tmk_core/rules.mk
When SKIP_DEBUG_INFO=yes is specified, do not use the -g option at compile time.
* tmk_core/rules.mk: Library object need -fno-lto
* add SKIP_DEBUG_INFO=yes
* remove temporary compile test shell script
* add '#define SOFT_SERIAL_PIN D0' to keyboards/lets_split/rev?/config.h
* quantum/split_common/serial.c: Changed not to use USE_I2C.
* Refactor fourier to use split common code
* Refactor fourier to use split common code - fix handedness when not using EE_HANDS or MASTER_LEFT
* add SOFT_SERIAL_PIN config
* Add delay in Tap Code to avoid issues
I think a few people have reporting issues with it working properly, and it may be a timing issue. The 'register_code' uses this sort of delay in some of the functions, and
this is probably why.
Adding the 100ms delay should hopefully fix any issues with it.
* Make tap_code delay configurable
* Update documentation
* Bring tap_code16 inline with changes
* Fix type for tap_code16
Bad copy-paste job
* Just use the value check for the define
* Clarify timing in docs
Co-Authored-By: drashna <drashna@live.com>
* Wordsmithing
Co-Authored-By: drashna <drashna@live.com>
* handwired/CMD60: refactor
- renamed layout macro KEYMAP to LAYOUT
- removed K2C, K3B and K3C locations (indications are these locations were unused in hardware)
- keymap
- now uses #include QMK_KEYBOARD_H
- converted keycodes to short format
- deleted TMK fn_actions and action_get_macro blocks
- white space changes (readability/alignment)
* handwired/CMD60: Configurator support
* handwired/CMD60: readme update
- updated to conform to current QMK template
- added image and build gallery links
* handwired/cmd60: rename all files and folders to lowercase
* handwired/maartenwut: readme cleanup
- Fixed typo (Maarten's last name was misspelled)
- Updated Docs links
* handwired/maartenwut: Configurator support
* S7 Elephant: Configurator bugfix, part 1
Reformatted the JSON so each key is on its own line:
This makes the keys easier to rearrange.
* S7 Elephant: Configurator bugfix, part 2
Deleted the extra key from LAYOUT_iso_1u:
JSON contents stated this layout used a split Backspace, but the matrix is configured and intended to have a 2u Backspace.
Extended the Backspace to 2u width and deleted the extra key. (This fixes the error that broke LAYOUT_iso_1u's rendering in the Configurator.)
* S7 Elephant: Configurator bugfix, part 3
Fix ISO layouts:
Noticed JSON object for Enter on ISO layouts was immediately after Right Bracket. Inspection of s7_elephant.h revealed the expected and appropriate location to be after ISO Hash.
Moved Enter key to the proper location on all ISO layouts.
* Add standard ALGR defition, remove (re)definitions from language files
* Use ALGR(kc) consistently in ALTGR(kc) aliases
* Non-Nordic keymaps should not use NO_ALGR
* Add standard KC_ALGR definition
* Update docs with ALGR and KC_ALGR
* Update SS_ALGR and ALGR_T aliases
* handwired/numpad20: refactor
- layout macro no longer auto-prepends keycodes with KC_
- keymaps for this keyboard will now compile in QMK Configurator
- keymap now uses #include QMK_KEYBOARD_H
- deleted unused fn_actions code block
* handwired/numpad20: Configurator support
* Preonic: refactor layout macros
Unify layout macro names across AVR and ARM.
- all layouts and matrices have moved/duplicated to their appropriate revisions
- preonic.h now includes the appropriate header file from the selected revision
- revision header files only contain layouts appropriate for that revision
- Previously, all layouts were available in source for all revisions.
- removed KEYMAP layout macro alias (was unused)
- macros LAYOUT_preonic_1x2uC and LAYOUT_preonic_grid for AVR and ARM revisions
- LAYOUT_preonic_grid has alias LAYOUT_ortho_5x12 for all revisions
- deleted LAYOUT_ortho_4x12 alias (not appropriate for this keyboard)
- ARM-based revisions have 1x2uR, 1x2uL and 2x2u matrices
* Preonic: updated revision headers to #pragma once
* Preonic: update Configurator files
Updated the Configurator files to reflect the previous changes in this branch.
- Preonic revs. 1 and 2 will use keyboards/preonic/info.json
- Preonic rev. 3 will use keyboards/preonic/rev3/info.json
- This file will override keyboards/preonic/info.json when preonic/rev3 is selected in the Configurator.
* handwired/practice60: Configurator Support
* handwired/practice60: refactor
- layout macro rows did not have an equal number of arguments in all rows of the matrix
- white space changes for readability/alignment
* handwired/pilcrow: refactor
- layout macro renamed from KEYMAP to LAYOUT
- keymap now uses #include QMK_KEYBOARD_H
- layers reformatted for readability
- removed unused and deprecated fn_actions and action_get_macro blocks
- keymap config.h
- updated to use #pragma once
- removed redundant config.h include
* handwired/pilcrow: Configurator support
* handwired/pilcrow: readme update
Updated readme.md file to use modern template formatting.
On a laptop with god knows what mandatory security software (Cylance?), running up-to-date Windows 10 with msys2 mingw-64, attempting to install the AVR toolkit results in the following error:
```
1 [main] 7z (13316) C:\msys32\usr\lib\p7zip\7z.exe: *** fatal error - cygheap base mismatch detected - 0x612A5410/0x2375410.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version. The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution. Rebooting is also suggested if you
are unable to find another cygwin DLL.
```
This appears to be related in some way, based on my research, to ASLR functionality in security software. Since I'm unable to override whatever is enforcing ASLR on my system, after trying several other approaches (removing other copies of msys-2.0.dll, which is what this is apparently actually referencing, rebasing that file in Windows to address 0x61000000, a few other things) I simply edited the installation shell script to use `unzip` instead of 7zip; `unzip`'s binary does not provoke a mismatch error and the installation proceeds as it should.
I'm not aware of the reason why some parts of the install script use `unzip` (e.g. `install_arm`) and others use 7zip, but it seems that for broader compatibility and sparing users on locked down machines the 120 minutes or so of futzing this took me to fix, it might be better to just use `unzip` in all cases.
Note: There is another function that uses 7zip, `extract_flip`. The line is `7z -oflip x FlipInstaller.exe`. I'm not sure what this is doing, or whether it's possible to do it with `unzip`, but it produces the same error. I haven't attempted to fix that in this PR, but it might be good to fix it for the same reason.
MCU Pins for debugging, LED, boot tracing, and shift registers are now configurable at keyboard level.
Macros led_* replaced by DBG_LED_*
Macros m15_* replaced by DBG_1_*
Macros m27_* replaced by DBG_2_*
Macros m28_* replaced by DBG_3_*
For CTRL and ALT keyboards, debug boot tracing pin default now set to pad M27 instead of M28 since although M28 is not being used, it is technically a signal for USB port detection.
m15_print(...) renamed to dbg_print(...) to get away from hard coded port names.
dbg_print function now follows similar pattern to debug led output.
* Added RGB toggle and cycle to default mapping. This is present on layouts on 'http://qmkeyboard.cn/' but not here.
* Added addition keycodes for hue/sat/val.
* Add a Docker build script
* Add usage and error messages
* Add -r to reads
Thanks mechmerlin
* Add keyboard:keymap form, improve script
* Add target argument, change usage forms in script
* Add check for more than 3 args in keyboard:keymap:target form
* Change Docker base image to debian, use community repo
This matches what qmk_compiler uses (https://github.com/qmk/qmk_compiler/blob/master/Dockerfile#L1).
I've removed the maintainer as we now have a community build on Docker Hub (https://hub.docker.com/r/qmkfm/qmk_firmware). This Dockerfile will also be maintained by the community.
* Change build command format to keyboard:keymap
* Call make directly in container run command
* Simplify script, remove 3-arg form
* Add COPY to Dockerfile so images are usable in and of themselves
Also change WORKDIR from /qmk to /qmk_firmware
* Add USB pass-through for Linux and docker-machine hosts
* Read directly into variables instead of array
* Alphabetically sort dependencies in Dockerfile
* Set executable bit on util/docker_build.sh
* Update Docker docs
* Add warning about Docker on Windows
* Expand comment in docs
* Check docker-machine exit code instead of string
* Only match --help with whole arguments
* Make script POSIX-compliant
* Convert script indentation to tabs
* handwired/minorca: refactor
- Refactored keymaps to use a layout macro, which was added to minorca.h.
- keymaps now use QMK_KEYBOARD_H include
- removed redundant KC_TRNS and KC_NO definitions
- rgb keymap refactor to use QMK core layer switching and Mod-Tap keycodes
* handwired/minorca: Configurator support
* handwired/minorca: readme cleanup
Restructure readme file to current QMK template.
* Update alps64 aek layout to work
I tried using the layout provided with my alp64 board in AEK
configuration, but keys weren't mapping correctly until I made this fix.
* Update crd's alps64 aek keymp to match other boards
(inspired by mechmerlin)
* Fix minor whitespace issue
* Initial palm_usb support
* removing left over sun .c file
* fixing licenses
* actually adding updated files
* fixing build error
* more include cleanup
* handwired/gamenum: refactor
- layout macro KEYMAP renamed to LAYOUT
- white space changes for alignment
- default keymap
- now uses #include QMK_KEYBOARD_H
- updated layout macro names
- white space changes (for readability)
* handwired/gamenum: Configurator support
* handwired/gamenum: readme cleanup
- renamed file to lowercase
- updated to match current QMK template more closely
- edits to reflect the other changes in this PR
* Add initial support for vertically-oriented animations
* DRY up vertical animation support
* Fix animation code for arm_atsam led_matrix to work in all directions
* Adjust py calculation to base off bottom rather than top
Adds Configurator support for the Sol rev. 1 by RGBKB.
Notes:
The Sol keyboard supports split thumb keys like the Ergodox - any of the 2u thumb keys can be split into two 1u keys. The matrix here is configured for fully 1u keys on the thumbs.
The Sol also supports installing a rotary encoder on each half. The key matrix given includes the encoders' functions, which are shown in the Configurator as two 1u keys side by side below each half's main key block. The left key of the two (for each side) represents that half's rotary encoder's counter-clockwise function, and the right key is that encoder's clockwise function.
* handwired/fivethirteen: refactor
- Layout macro KEYMAP renamed to LAYOUT
- Default keymap
- now uses #include QMK_KEYBOARD_H
- Removed redundant KC_TRNS definition
- Removed deprecated fn_actions and action_get_macro functions.
* handwired/fivethirteen: Configurator support
* handwired/fivethirteen: readme cleanup
Restructured readme file to be closer to current QMK template.
Couldn't find a photo of an assembled fivethirteen, so deleted the
reference to the photograph.
Renamed to readme.md
* handwired/dactyl_manuform/4x5: Configurator support
* handwired/dactyl_manuform/4x6: Configurator support
* handwired/dactyl_manuform/5x6: Configurator support
* handwired/dactyl_manuform/5x7: Configurator support
* handwired/dactyl_manuform/6x6: Configurator support
* Update to work with Planck Rev. 6
Still something that needs to be worked with under keymap.c
Qwerty layer tap-toggle function seems to be a little laggy? Not instantaneous
* Changes
Deleted some unneeded lines
* deleting unneeded lines
* my XD75 builds for idobo and XD75
these are my xd75 layouts for the 2 versions of the board
* clearing of free space
spring cleaning
* additional cleaning
more spring cleaning
* removed lighting commands
don't need lighting on the idobo board so removal of such commands to keep the sizing down
* update for readme.md
* Update config.h
* commiting with keymap erros on idobo for review
* syntax fix for idobo and xd75 revok75, addition of del key switch on fn layer
* config edit to config user and keymap QMK_KEYBOARD_H
* update to vol controls for both idobo and xd75 for revok75 keymap
* filename changes
Specifically, moved the shifted keycodes to the top of the 'Feature' list, so it's more visible. This way, all of the keycodes are at the top of the list, rather than having the shifted keys at the bottom, so they should be easier to find since they're all in one place.
* Refactor lets split to use split common code
* Refactor lets split to use split common code
* Build fixes for OLED_sample keymap
* Build fixes for OLED_sample keymap - attempt to reduce firmware size
* preonic-kuatsure: ctrl / esc in one key + hello ` again
* preonic-kuatsure: remove esc on lower
* preonic-kuatsure: programmy macros
* user-kuatsure: turn off console all the time
* preonic-kuatsure: auto shift, but only for numbers
* preonic-kuatsure: remove programmery macros
* preonic-kuatsure: move braces, parens, etc over to raise
backwards compat
move &*() on lower
* preonic-kuatsure: stop with the full rep of game layer
* Add tsangan bottom row hhkb layout for dz60
* Add crd's tsangan hhkb layout for dz60
* Resort to native key aliases when they exist
* Update crd's dz60 ansi keymap to match updates for hhkb fn layer
* Add tsangan hhkb layout to dz60 info.json for KLE
* Fix JSON nesting in dz60 layouts block
* Minor adjustments to crd layouts to make them more consistent
* Update layout naming to 60_tsangan_hhkb
* Hacker Dvorak
Programmer Dvorak based layout for the Ergodox EZ.
* Address drashna comments.
* Fix RGB and drop OSL for MO.
* Add gulp file to automate development.
* Fix gulpfile.
* Caps, num and scroll lock indicators.
* Fix scroll lock.
* Add final RGBKB Sol firmware
* Apply suggestions from code review
Apply most of the changes noroadsleft has suggested
Co-Authored-By: Legonut <legonut3@gmail.com>
* Cleanup readme
* Cleanup keymaps per @noroadslefts suggestions
* Remove eeproms, use set_single_persistent_default_layer
* Suggestions from @noroadsleft and @drashna
some small cleanup
* Change RGB_SMOD to RGB_RMOD
* fix RGB_SMOD
* Apply suggestions from code review
Remove redundant lines
Co-Authored-By: Legonut <legonut3@gmail.com>
* Break up files to make more readable
* Add comments to ortho 4x12 layout rules.mk
* Small tweaks
* Update GitLab CI scripts
* Make ortho boards smaller
* add initial support for hadron ver3
* add initial support for hadron ver3
* pull qwiic support for micro_led to be modified for use in hadron's 64x24 ssd1306 oled display
* initial work on OLED using qwiic driver
* early work to get 128x32 oled working by redefining qwiic micro oled parameters. Currently working, but would affect qwiic's micro oled functionality
* moved oled defines to config.h and added ifndef to micro_oled driver
* WORKING :D - note, still work in progress to get the start location correct on the 128x32 display.
* added equation to automatically calculate display offset based on screen width
* adding time-out timer to oled display
* changed read lock staus via read_led_state
* lock indications fixes
* Added scroll lock indication to oled
* add support for DRV2605 haptic driver
* Improve readabiity of DRV2605 driver.
-added typedef for waveform library
-added unions for registers
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Fixes for PR
* PR fixes
* fix old persistent layer function to use new set_single_persistent_default_layer
* fix issues with changing makefile defines that broken per-key haptic pulse
* Comment fixes
* Add definable parameter and auto-calibration based on motor choice
* keymap + alpha
* some fixes
* keymap + alpha
* some fixes
* drashna changes
* linked main Alpha repo in keyboards/alpha readme
* missed a spot
* there's another function called FUNC lol
* keymap + alpha
* some fixes
* keymap + alpha
* drashna changes
* Fixed include
* Revert "Fixed include"
This reverts commit ea92f261f8.
* messed up my git, fixed include
* add zh-cn readme
* edit readme
* Round 1 of edits
- Mandarin translation of QMK products is off, best to use the English name.
- Fix some terminology and grammar.
* trying re-translating the first paragraph
* add fallback langurages
* Create LANGS.md
* Rename docs/zh-cn/README.md to docs/zh/README.md
* Update LANGS.md
* Update index.html
* Delete README.md
* add sidebar for zh
* add zh-cn readme
* edit readme
* Round 1 of edits
- Mandarin translation of QMK products is off, best to use the English name.
- Fix some terminology and grammar.
* trying re-translating the first paragraph
* add fallback langurages
* Create LANGS.md
* Rename docs/zh-cn/README.md to docs/zh/README.md
* Update LANGS.md
* Update index.html
* handwired/atreus50: refactor
- layout macro renames:
- KEYMAP is now LAYOUT
- COMPACT_KEYMAP is now LAYOUT_kc
- keymap updates:
- both keymaps now use #include QMK_KEYBOARD_H
- removed redundant KC_TRNS and KC_NO definitions
- default keymap now uses LAYOUT macro instead of LAYOUT_kc
* handwired/atreus50: readme cleanup
Reformatted the readme to be more closely aligned to current QMK
template, and fixed some typos/grammar.
* handwired/atreus50: Configurator support
* add 60_hhkb support
* add qmk configurator support for the new 60_hhkb layout
* allow community layout support for the 60_hhkb
* fixup readme to adhere to new QMK standards
* handwired/promethium: refactor
- config.h files
- updated to use #pragma once
- removed redundant config.h includes
- layout macro moved from config.h to promethium.h
- layout macro renamed from KEYMAP_CUSTOM to LAYOUT
* handwired/promethium: Configurator support
* Add support for S7 Elephant
A high-end 70% custom keyboard designed and produced by jacky from Geekhack.
* Polish S7 Elephant code
Implement drashna's suggestions:
- specify bootloader
- remove unnecessary defines
- use led_set_user() for LED logic
* Correct info.json and s7_elephant.h
Correct info.json and s7_elepant.h to follow QMK convention and fix a
missing curly bracket.
* Add a layout to support tsangan bottom row with split bs and rshift
* Move the new layout to defaults
* Rename layout to be more accurately representative
* Rename files to match renamed layout def
* Refactored M6-B to use Zeal60 RGB backlight code
* Fixed M6-B LED co-ordinates
* Minor changes to RGB config for Zeal65
* Added dynamic keymaps to WT80-A, WT60-A, WT-80A, U80-A
* Macro implementation
* Implemented macros, API protocol version 8, RGB backlight fixes
* Improved radial effects for M6-B
* Fixed undefined references when building an RGB keyboard after M6-A
* add zh-cn readme
* edit readme
* Round 1 of edits
- Mandarin translation of QMK products is off, best to use the English name.
- Fix some terminology and grammar.
* trying re-translating the first paragraph
* handwired/arrow_pad: layout macro and keymap refactor
- Layout macros moved from the keymaps to arrow_pad.h.
- LAYOUT_pad21 refactored to only accept keys that are physical present (no KC_NO entries required in keymap)
- Keymaps now use #include QMK_KEYBOARD_H
- Keymaps refactored to use process_record_user function (from action_get_macro)
* handwired/arrow_pad: Readme cleanup
Fixed the make commands and updated the layout macro.
* handwired/arrow_pad: Configurator support
* Fix reversed bool check in layer_state_set
* Add Quefrency 65 for a friend
* Add Ergodox EZ Glow keymap
* Add RGB Matrix Code
* Further changes to rgb matrix ErgoDox EZ
* Update bjohnson keymaps
* Fix CRKBD display
* Overhaul to corne keyboard
* Narrow scope for keylogger
* Minor layout tweaks to Corne Keyboard
* additional CRKBD tweaks
* Minor tweaks to CRKBD
* Add all characters for keylogger
* Ergodox EZ Glow overhaul
* Fix Ergodox EZ Glow layer colors
* Increase Tapping Term for Corne Keyboard
* Fix unicode-ish
* Revert some changes
* Add layer specific lighting effects
* Some minor tweaks to ergodox glow config
* revert changes to ergodox files
* Update Glow readme
* Add more tapping term defines
* Fix changes
* Fix ergodox keymap
* Hopefully fix sleeping
* Disable layer indications if rgb matrix is disabled
* Add support for sleeping and rgb layer change toggle to ergodox ez glow
* Make RGB Layer Indication Great Again
* Make Unicode Great Again
* Remove placeholder define
Co-Authored-By: drashna <drashna@live.com>
* Remove placeholder define
Co-Authored-By: drashna <drashna@live.com>
* Remove old EEPROM Reset keycode
* Enable ortho_4x12 community layouts for lets_split_eh
* Keymap build fixes now that ortho_4x12 is enabled
* Keymap build fixes now that ortho_4x12 is enabled
* compiles but is not working
* still testing 5291
* compiles but is not working
* still testing 5291
* fixed a but in the layout (reversed key order in row)
* compiles but is not working
* still testing 5291
* fixed a but in the layout (reversed key order in row)
* fixed some issues
* doumentation needed
* doumentation needed
* documentation needed
* documentation needed
* Update readme.md
documentation
* Update readme.md
i dislike markdown <_>
* merge preperation
* Enable 4x4 and 5x5 community keymap support
* Pull 4x4 community keymap fixes from @noroadsleft
* Build fixes for guidoism keymap - move keymap to layouts/community/planck_mit as it uses the LAYOUT_planck_mit macro
* remove clmk and dvrk and backlight; switch esc and enter to be modtap; add meh key
* change songs
* space cadet; move enter; move '"; move pgup pgdn
* remove extra songs
* update from noahfredrick keymap
* make it easier to type ../../thing/*/*
* move pipe
* requested changes
* add interrobang support
* add shift-insert to raise-v and lower-v, move pipe to raise-/lower-n
* Adding my new keymap, based of xd75, with leds enabled via the rules.mk file
* cleaned up the rules file
* Per Change Requests: removed deprecated functions along with updated the map to use the layout macro instead of raw matrix
This is the final version of my layout.
Overall changes
===============
* Updated to work with QMK master.
Miscellaneous
=============
* The `😂` symbol can be entered with UCIS.
* `LEAD r` now inputs `Right Alt`.
Signed-off-by: Gergely Nagy <me@gergo.csillger.hu>
* Fix firmware to work with latest Wilba changes (i.e. dynamic keymap) and M60a.
* Get back RGB Backlight codes.
* More tweaks.
* Update users/talljoe/rules.mk
Co-Authored-By: Talljoe <jwasson+github@gmail.com>
* Include both base keyboards
* Merge the keymap
* Merge the configs
* Add wiring diagram for clarity of documentation
* Merge rules
* Merge keyboard sources
* Change names to compile
* Update documentation to suit
* Add qwerty layout to 108keyTrackpoint
* Separate the dvorak standard layout from a media focused one
* Update documentation to reflect new keymaps
* [style] Add empty lines at ends of files
* [style] Meet current QMK style guide
* Bring READEME closer to the QMK template
* [style] Change all "108keyTrackpoint" to "108key_trackpoint"
* [style] Use "LAYOUT" instead of "KEYMAP"
QMK terminology has changed
Co-Authored-By: mkem114 <20897849+mkem114@users.noreply.github.com>
* Add two spaces after maintainer in README
This is required to render properly
Co-Authored-By: mkem114 <20897849+mkem114@users.noreply.github.com>
* Remove redundant line
"PREVENT_STUCK_MODIFIERS" is default on for QMK
Co-Authored-By: mkem114 <20897849+mkem114@users.noreply.github.com>
* Change include of keymaps to use QMK_KEYBOARD_H
This includes automatically
* Update make rules to match template
* Change from KC_MENU to KC_APP
The button functionality actually wanted is the context menu key
* [style] Change "dvorakMedia" to "dvorak_media"
* Update README to reflect minor changes
The debounce filtering reports a key/switch change directly, without any extra delay. After that the debounce logic will filter all further changes, until the key/switch reports the same state for the given count of scans.
So a perfect switch will get a short debounce period and a bad key will get a much longer debounce period. The result is an adaptive debouncing period for each switch.
This value defines how often the same key/switch state has to be detected in successive reads until the next key state can be reported.
In other words this value defines the minimum debouncing period for a switch.
* fix formatting of keymap
* update readme with boards I currently own
* made the wrong assumption that every board would use the same space for backspace
* update readme with boards I currently own
* Allows disabling animations in user space
* Describe disabling effects in the docs
* Allows disabling individual reactive modes
* Adds the list ode defines
* Add TKL JIS layout for Pegasus Hoof
Tested with a JIS Majestouch 2 TKL
* Add default_jis keymap for Pegasus Hoof
* Remove unnecessary keycode definition
* Remove legacy fn_actions in favor of MO(1)
* Remove unnecessary build directive
* fix to prime o keymap
* changed ortho keymaps
* added some symbols to lower layer
* set lower to be a higher layer than raise
* added split layout option with center numpad to prime_o keymap
* added some gaming functionality
* added alt f4 ortho keymaps and userspace
* fixed small error
* 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
* added numpad and tweaked bottom row
* Move 68keys keymap to mf68 folder
* Remove 68keys keyboard now its been migrated to mf68 keymap
* Migrate 68keys build config to mf68 keymap overrides
* Unify multiple HID interfaces into one
This reduces the number of USB endpoints required, which frees them up
for other things.
NKRO and EXTRAKEY always use the shared endpoint.
By default, MOUSEKEY also uses it. This means it won't work as a Boot
Procotol mouse in some BIOSes, etc. If you really think your
keyboard needs to work as a mouse in your BIOS, set
MOUSE_SHARED_EP = no in your rules.mk.
By default, the core keyboard does not use the shared endpoint, as not
all BIOSes are standards compliant and that's one place you don't want
to find out your keyboard doesn't work.. If you are really confident,
you can set KEYBOARD_SHARED_EP = yes to use the shared endpoint here
too.
* unify endpoints: ChibiOS protocol implementation
* fixup: missing #ifdef EXTRAKEY_ENABLEs
broke build on AVR with EXTRAKEY disabled
* endpoints: restore error when too many endpoints required
* lufa: wait up to 10ms to send keyboard input
This avoids packets being dropped when two reports are sent in quick
succession (eg. releasing a dual role key).
* endpoints: fix compile on ARM_ATSAM
* endpoint: ARM_ATSAM fixes
No longer use wrong or unexpected endpoint IDs
* endpoints: accommodate VUSB protocol
V-USB has its own, understandably simple ideas about the report formats.
It already blasts the mouse and extrakeys through one endpoint with
report IDs. We just stay out of its way.
* endpoints: document new endpoint configuration options
* endpoints: respect keyboard_report->mods in NKRO
The caller(s) of host_keyboard_send expect to be able to just drop
modifiers in the mods field and not worry about whether NKRO is in use.
This is a good thing. So we just shift it over if needs be.
* endpoints: report.c: update for new keyboard_report format
* Docs: Configurator Support
* Minor updates
* Updated keyboard.h example to use #pragma once
per @drashna
https://github.com/qmk/qmk_firmware/pull/4396#discussion_r232140934
* Add link to doc under Reference section
Added to _sidebar.md and _summary.md
* Changed doc title; minor tweaks
Re-titled the doc as "Supporting Your Keyboard in QMK Configurator".
Made some minor changes to the keyboard.h examples.
* Added tags object to JSON example
* add functions to set specific backlight state
* add function to query backlight state
* update documentation with new backlight functions
* Update tmk_core/common/backlight.c
Co-Authored-By: codyd51 <phillip.ennen@gmail.com>
* Update tmk_core/common/backlight.h
Co-Authored-By: codyd51 <phillip.ennen@gmail.com>
* update docs for is_backlight_enabled() name change
* Add 412-64 keyboard firmware
It's pretty barebones for now, but the Model 00 is also a pretty barebones machine. Model 01 won't be better, but plenty of pins exist for things like LEDs on Model 02.
* MANU/PROD ID changes.
Changed around the MANUFACTURER and PRODUCT IDs to be more polite when viewed in qmk toolbox.
* Fixing PROD again.
For the love of all that is good and holy, that was ugly. This new one looks better. This stuff matters to me for some reason.
* Yep, updating MANU again.
There we go. That's better - From my name to my "design firm".
* Update keyboards/412_64/keymaps/default/keymap.c
Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>
* Update keyboards/412_64/rules.mk
Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>
* Update keyboards/412_64/rules.mk
Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>
* Update keyboards/412_64/rules.mk
Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>
* Update keyboards/412_64/rules.mk
Co-Authored-By: FateEverywhere <41215461+FateEverywhere@users.noreply.github.com>
* Refactored M6-B to use Zeal60 RGB backlight code
* Fixed M6-B LED co-ordinates
* Minor changes to RGB config for Zeal65
* Added dynamic keymaps to WT80-A, WT60-A, WT-80A, U80-A
* initial commit for kbd67 keyboard
* add in a standard matrix
* get the correct matrix for layout_all
* add a layout_65_ansi LAYOUT macro
* get a default keymap in
* add caps lock led support
* fix formatting of my name in the comments
* add QMK Configurator support
* turn on bootmagic
* Starting point for blue pill based practice60
* Changes
* add
* try raw bin no botloader
* swap back to bootloader version
* edit
* Remove debug LED flash
* Disable JTAG to open up B3 and B4
* Add led backlight support (no breathing yet)
* Update matrix for correctness
* RGB Underglow working in a very simple state
* not as bright
* Move to handwired
* revert ChibiOS_Test changes
* Changes based on PR comments
* Address PR comments v2
* Move files
* Fix up screen off timer of helix
* Fix Up ScreenOffInterval exceeded uint16_t
* Fix Up never waking up once screen off if in case of matrix are not dirty
* Changing referenIng incorrect constant name
* OLED_ENABLED => SSD1306OLED
* Improve internal processing of process_record_kb()
* Use the return value of process_record_gfx()
* Move a include statement into #ifdef block
Move #include "ssd1306.h` statement into #ifdef block
* Move process_record_kbI()
Move process_record_kb() from helix.c to rev1.c/rev2.c/pico.c
* Move process_record_kb()
* fix about screen off timer
* Fix Up ScreenOffInterval exceeded uint16_t
* Fix Up never waking up once screen off if in case of matrix are not dirty.
* Revert "fix about screen off timer"
This reverts commit 3d175f2340.
* Fix up screen off timer of crkbd
* Fix Up ScreenOffInterval exceeded uint16_t
* Fix Up never waking up once screen off if in case of matrix are not dirty.
* Fix up screen off timer of helix
* Fix Up ScreenOffInterval exceeded uint16_t
* Fix Up never waking up once screen off if in case of matrix are not dirty
* Revert "Fix up screen off timer of helix"
This reverts commit f0efb82443.
* Improve internal processing of process_record_kb()
* Use the return value of process_record_gfx()
* Fix a indent
Fix a indent
* Remove unnecessary re-definitions for XXXXXXX and _______
* Update 6lit to use KC_NO in layout macros
* Update rules.mk to follow current template
* Remove use of deprecated function action_get_macro - unused and contents were from old template
* Remove use of deprecated function action_get_macro - all code was commented out
* Remove use of deprecated function action_get_macro - convert macro to use process_record_user
* Convert keymap to consistent use of _______
* fix use of old style header guards
* Swap KC_NO for XXXXXXX macro since the swap to the macro for KC_TRANS
* Resolve use of ?= in rules.mk files
* Remove duplication of rules.mk and config.h in gherkin mjt keymap
* Remove unnecessary #includes
* Align layout macros so foobar can use gherkin keymaps
* Align 6lit layout macros with foobar
* Remove ifndef QUANTUM_DIR from keymaps
* Initial 25 port
* Initial 25 port - fix info.json and hand_swap_config
* Review comments - fix layout macros, copyright comments, and duplicated use of layering macros
* Add support for slackware distribution (linux_install.sh)
The required packages are not provided by the official repository. The packages
need to be installed from slackbuilds.org either manually or with the help of
third party tools like sbotools.
* Modify linux_install.sh according to code review
Modifies the Slackware section of the linux_install.sh script based on the
suggestions from the code review.
* Modify utils/linux_install.sh according to suggestions
* Improve new_project script
- use git user.name if available to replace the boilerplate name in
files we generate
- fix shellshock warnings
* Test for git repo
Suggestion by @skullydazed
* Fix shellshock warning
* Incorporate feedback from reviewers
- thanks @vomindoraan
- use a heredoc instead of echo for console
- factor out common paths
* I2C driver docs
- Added I2C driver docs.
- Changed arm master i2c driver to have a weak i2c_init as it is impossible to account for all possible port configuration in the STM32 world.
* Update docs/i2c_driver.md
Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
* Update docs/i2c_driver.md
Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
* Update docs/i2c_driver.md
Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
* Update docs/i2c_driver.md
Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
* GPIO release fix
* initial commit
* put my name everywhere
* get the switch matrix correct
* add a basic keymap
* use a better LAYOUT macro
* update readme
* Add QMK Configurator support
* Added support for backlight , and a UK iso layout
Added support for backlight , and a UK iso layout. Now uses the SPLIT_KEYBOARD #define rather than relying on lets split
* Update keyboards/diverge3/keymaps/isoUK/keymap.c
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/isoUK/keymap.c
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Simplified the lower layer
Simplified the lower layer
* dir rename to snake case
dir rename to snake case
* changed dir case
changed dir case
* Update keyboards/diverge3/rules.mk
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/config.h
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/config.h
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/keymap.c
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/keymap.c
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/keymap.c
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/config.h
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/config.h
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/config.h
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* Update keyboards/diverge3/keymaps/iso_uk/config.h
Co-Authored-By: mcmadhatter <mcmadhatter@hotmail.com>
* aligned and tidyied up
aligned and tidyied up
* dlg's keymap
* fix list order
* remove cruft
* pragma
Co-Authored-By: dlgoodr <dlg@dsrw.org>
* turn on bootmagic, enable swapping ` and Esc while I figure out which compromise is least bad
* Initial move of 40percent.club boards to common parent folder.
* Refactor readme files to be consistent
* Refactor readme files to be consistent - fix make command examples.
* Refactor readme files to be consistent - align readme filenames.
* Refactor readme files to be consistent - fix repo url.
* Disable Community keymap builds as they are currently failing due to missing functionality
* Move more of 40percent.club boards to common parent folder.
* Refactor readme files to be consistent - align readme filenames.
* Refactor readme files to be consistent - fix make command examples.
* Preliminary 30wer firmware. Not tested on real board yet.
* Added a layer to default 30wer keymap.
* Wrote readme for 30wer.
* Added 30wer info.json.
* Configurable Rainbow Swirl range
This allows tweaking of the rainbow effect to
get different effects on keyboards with varied
LED layouts. We found the value 1950 works on
the RGBKB.net Sol to get a cool striped effect
across the keyboard.
* Document RGBLIGHT_RAINBOW_SWIRL_RANGE
* Better wording for the documentation
The new simple API can be selected.
Previous version, can select two way.
* use old API (compatible with let's split serial.c)
* use new API (multi-type transaction)
This version, can select three way.
* use old API (compatible with let's split serial.c)
* use new API (single-type transaction)
* use new API (multi-type transaction)
There is no change in the code generated by this change.
* Consistency fixes and more eeprom defaults
* Handle setting Unicode mode on eeprom reset better
* Unicode EEPROM hack
* Re-enable permissive hold and ignore mod tap
* Set unicode input mode
* More unicode stuff
* more haaaaaacks
* Attempted RGB Cleanup
* Fix compiler issue
* Add GitLab CI config for personal compiling
* Add avr gcc version to GitLab CI script
* Add rgblight init to matrix init
* Use Magic+Esc for entering bootloader mode
* Expand rules.mk
* Improve FN_RCTL tap dance
* Avoid one-line if statements
* Add PROGMEM to keymaps definition
* td_fn_rctl_* → td_fn_rctrl_*
* Fix FN_RCTL tap dance bug when count is 4, 8, 12 etc.
* Add ACTION_TAP_DANCE_DOUBLE_MODS
* Rearrange/rename keycode defines
* Use RAL_RGU and RCT_RSF in keymaps
* Replace keymap ASCII art with box drawing characters
* Add FN_FNLK and use it
* Set Unicode input mode in eeconfig_init_user instead of matrix_init_user
* Update userspace with common config.h
* Add my dz60, satan and xd75 keyboard keymaps
* Fixing executable bits changed during last upstream merge
* Cleanup unnecessary files and defines
* Remove unnecessary defines from userspace config
* Add underglow controls to dz60 function layer
* Fixing merge conflicts
* Fixing exectable bits changed during merge
After further testing and feedback from others, the bottom row matrix was incorrect. Also RGB number was incorrect (I was tired when building this, really shouldn't do that).
* converter/adb_usb: Configurator support
Note: LAYOUT_ext_ansi has a blank space between the Spacebar and the
Right Alt/Option key when loaded in the Configurator. This is
deliberate.
Stock Apple Extended Keyboards and AEK IIs send the scan code for Left
Command when either Command key is used. (This is noted already in the
readme.) That being the case, the Command keys cannot be assigned to
different functions. Whichever keycode is placed on Left Command will be
used for both Command keys.
* converter/adb_usb: adb_usb.h cleanup
- replaced KEYMAP_COMMON_H with ADB_USB_H
- white space changes for visual alignment in LAYOUT_ext_ansi macro
* port over Rozakiin https://github.com/Rozakiin/Noxary_Firmware/tree/master/noxary_x268
* rename LAYOUT to LAYOUT_65_ansi default layout
* add configurator support
* add community layout support
* put Rozakiin's name everywhere
* update readme
* problems with the 65_ansi keymap to be diagnosed later
* Add distro support for sabayon
Sabayon is a gentoo based distro with a different package manager. Does
not need any use flags or masking for the required packages.
* Add missing backslash
* Put echo string in quotes, remove extra newline
* Order gentoo/sabayon packages alphabetically.
Rewrote USB state tracking for implementation of suspend state.
Updated suspend.c in entirety.
Main subtasks (generally hardware related) are now run prior to keyboard task.
* add computed pins from mcu type
* update for atmega32a
* doc typo
* add atmega16 chips, link to references
* remove avr include from config
* exclude assembler in config.h includes
* consolodate options, add 646
* fix typo in pindef
* Keymap: add jyh levinson keymaps
remove tap dance number keys due to sluggish responses
simplify I2C configuration
reverse hyper and meh positions
reduce tapping term to allow fast typing with mod tap space keys
remove Alt hold on right space key. too many false touches.
add vim-style arrows (hjkl) on asdf; semicolon/quote on raise
correct documentation string for jyh levinson layout
add alternative levinson layout for jyh
more inspiration from atreus keyboard. keeps shift in the expected
places. reduces number of layers. puts numpad layout easily
accessible. places important keys on palms and meta keys on top
corners for xmonad.
correct layer switching in jyh2 levinson layout
I was getting stuck on the numpad layer because the numpad hold key
was remapped once the layer was activated. Bad idea. Minor other
refinements.
use curly bracket { instead of brace [ on raise layer
add RGB keys on adjust layer
bootmagic key is confusing. turn it off.
try out permissive hold setting to make mod-tap better
remove hold for right control on quote key. too many mistakes
turn off permissive hold. it was causing unexpected behavior
enable rgb underglow animations
add make it pink/blue key to levinson layout
prevent stuck modifiers in jyh2 levinson keymap
* fix up deprecated code after code review
* remove PREVENT_STUCK_MODIFIERS because it is default
Co-Authored-By: yamad <jyamada1@gmail.com>
Added JTAG disable code to the split_common slave code since the slave never calls keyboard_init(). In the future the slave should likely be modified to call keyboard_init() in some way, but without calling any of the unnecessary USB initialization code.
* added initial config files for vinta
* added readme
* changed product id and device ver
* fixed keymap illustration
* updated rules.mk to enable more commands
* removed a bunch of pre-code text; changed some grammar woopsies
* removed bootmagic lite
* updated developer's note
* updated readme.md
* Initial commit of guidoism
* created movement layer
* movement layer works!
* removed unnecessary layers
* moved enter key up and recreated caps lock
* cleaned up
* num pad
* checkpoint
* checkpoint
* checkpoint
* Added num pad
* changed max power draw so i can use this on ipad
* move around quotes
* added tri layer for a homed numpad
* moved layout to new style
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* added keys to unicode conversion
* removed adjust layer since its not used anymore
* moved esc to seperate key
* tweaked python
* checkpoint
* new code put into function
* new code put into function
* cleanup
* cleanup
* new code works perfect
* removed old code
* removed old code
* generate_c.py now replaces code within keymap.c
* added function layer
* updated readme
* updated readme
* updated readme
* updates readme
* updates readme
* updates readme
* Tweaks based on CR
* Remove old guidoism
* Use MO(_FUNCTION) directly
* Preliminary additon of bootmagic lite functionality
* Cleanup code
* Clean up bootmagic code
* Add documentation and clean up code
* Make 'lite' an option for BOOTMAGIC_ENABLE
* Update Templates with note about Bootmagic Lite option
* Detect Debounce variable
* Make sure debounce is a non-zero number
* Capitalize Bootmagic
* Capitalize bootmagic
* Update wording
* Re-add EEPROM reset, by popular demand
And add eeprom-less version to drashna userspace for his sanity
* Fix spacing
* Set BOOTMAGIC_ENABLE to use full/lite/off
And default yes to "full" for compatibility
* Add Bootmagic lite info to templates
* Remove text from makefiles
* Cleanup of makefile
* mention yes in bootmagic docs
* Wordsmitthing the docs
* Fix white spaces
* Readd default bootmagic setting, because it's necessary
* layer locked breathing, layer changed brighter leds
* move config for tapping term into config.h
* Respect LED off even with layer indicators, add readme and update config
to new standard
* update Readme with note about both sides of board being required to flash
* use ctl_t
* spruce up readme and add a changelog
* add comment about using CTL_T
* add more description
* use RSFT_T so I can still have a right shift key even on the _AL layer
* add config.h for rgblight_sleep
* update readme to talk about rgblight_sleep
* update changelog with new changes
When comparing the pins in this file to the Ergodox Infinity schematic, it seems that the first section is describing the rows and the second section is describing the columns.
- config.h deleted (file was redundant)
- layout macro LAYOUT_JD45 removed (identical to new macro LAYOUT)
- ../../config.h include line redundant due to past changes to build script
- keymap.c
- updated to use macro LAYOUT
- redundant KC_TRNS and KC_NO definitions removed
- config.h
- updated to more-preferred format
- layout macro LAYOUT_JD45 removed (identical to new macro LAYOUT)
- keymap.c
- updated to use macro LAYOUT
- redundant KC_TRNS and KC_NO definitions removed
The macro that was LAYOUT prepended KC_ to all the keycode arguments, preventing the Configurator from working with the JD45. This macro is now LAYOUT_kc.
The macro LAYOUT is a more-standard macro.
Switch identifiers have changed throughout. Format is k<row><column>.
* Added my Mechmini2 layout to qmk.
* Added more info to the readme.
* Made changes.
* Update keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c
Co-Authored-By: lbibass <ewdries02@gmail.com>
* Update keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c
Co-Authored-By: lbibass <ewdries02@gmail.com>
* added userspace readme
* small fix to userspace readme
* another fix to userspace readme
* changed and improved userspace readme
* Update readme.md
* Update readme.md
* changes to readme again
* readme again
* Added my(194h) atreus62 keymap
* Fixed what noroadsleft remarked in my pull request, hopefully got it all.
* Followed drashna's suggestion.
* Removed unused functionality from my keymap, added tap dance æøå and changed Layer 1 and Layer 2
* Removed unused functionality from my keymap, added tap dance æøå and changed Layer 1 and Layer 2
* change window focus shortcuts
* hangul
* macos goodness
* re-arrange tab keys
* remove tab switching keys
* left hand func
* glorious macro pad
* workspace rotation keys
* tabbing hotkeys
* left hand tab change keys
* SEND_STRING("!") on KC_EXLM
* use SEND_STRING for all shifted symbols
* SEND_STRING even for non shifted symbols so they play nicely with the shifted ones
* Made DZ60 layout with calculator
* Cleaned up and commented, preparing to fix bug with negative in front of open parenthesis as first character
* Fixed bug where negative sign infront of parenthesis as first character was parsed incorrectly
* Made a better solution for the bug from the previous commit
* Modularized and added a userfile so that this code can be used on various keyboards, found in doogle999
* Removed commented code from keymap
* Made the layer that is used for calculations a define so that it can be changed per keyboard
* Made the readme
* Made the readme in the correct place
* Revert "Made the readme in the correct place"
This reverts commit 7f8b59ed9e.
* Manually synced with qmk upstream
* Stopped repeat, made keys print character that they are defined as rather than what the keyboard wants them to do
* Added support for numpad, might make all keycodes custom so that there is no need to change doogle999.c if you want to change the keycode that is associated with a function, also made numpad automatically activating an option
* Fixed some bugs with backspacing, updated the readme
* Fixed some bugs with numlock turning on at the wrong times when a shift key was down
* Made the return to layer work automatically instead of just forcing it to layer 0
* fixes and style changes, 20% decreased binary size
* Fixed some bugs with double printing and compilation errors on my side
* Fixed bug with exceeding the buffer size
* Removed changes that added const-ness
* Made changes so that backspace does not repeat to remove backspace bugs, still some bugs with recalculating without having typed anything
* Fixed obo error with calc main loop
* Made includes more accurate in keymap for dz60
* Moved flags to user makefile
* keymap for 1upkeyboards/sweet16 multilayers rgb lighting and tapdance
* Update config.h
typo
* cleanup
Co-Authored-By: ridingintraffic <michael.j.fettis@gmail.com>
* layers are using layout macro
replaced the include guard (the ifndef, define, and endif at the end) with just #pragma once
changed undergrow to use layer-change-code
emoji macros are using send_hex_code_string
cleaned up the includes
* tap() removed
maxtrix_scan_user updated
conf.h cleanup
* Matrix/keymap refactor
- Deleted `KC_KEYMAP` macro
- Renamed `KEYMAP` macro to `LAYOUT_ortho_4x12`
- Default keymap updated to current QMK standards
- #include QMK_KEYBOARD_H
- Refactored from `KC_KEYMAP` to `LAYOUT_ortho_4x12` macro
- `action_get_macro()` deprecated in favor of `process_record_user()`
`rules.mk` *not* updated to include `LAYOUTS = ortho_4x12` because I have no idea if and how that works on a split and/or wireless keyboard.
* readme cleanup: markdown formatting
* Add Configurator support
* added support for ortho_4x12 layout
* Macro and readme updates
Macros updated to use `KC_NO` directly.
Readme updates and cleanup.
* Keyboard: initial support for XD87
* Add row/col pin configuration for XD87 PCB
* Add default ISO layout
* Fix incorrect KC in default_tkl_iso
The KC_NUBS is duplicated in the TKL ISO layout.
Compare with the fullsize ISO which has a KC_NUHS
in the corresponding place.
* Add support for community layouts
* Add TKL ANSI layout
* Enable TKL ISO/ANSI community layout
* Fix LAYOUT_all
* Configure backlighting for XD87
* Various documentation changes
* Converter: add XT USB converter from TMK
* Converter: port TMK code for USB converter to QMK
* Apply requested changes after code review by @drashna
- use "pragma once" instead of include guards
- use LAYOUT instead of KEYMAP
- allow customisation with matrix_init_user() and matrix_scan_user()
- set BOOTLOADER instead of BOOTLOADER_SIZE
- Add XT_ENABLE to OPT_DEFS
* Remove unnecessary lines
* Matrix/keymap refactor
White space and readability updates
* Configurator support
Added info.json file.
* Readme update
Markdown formatting
* Add support for ortho_4x12 keymaps
* Added planck_mit layout support
* Disable SWAP_HANDS_ENABLE for zlant:wanleg keymap
* Disable BACKLIGHT_ENABLE for zlant:bakingpy keymap
* Add caveats for shifted characters
And some formatting and grammar corrections.
Closes#1037
* Fix spelling of remote
* Fix spelling error
* Remote not Remove
* Remote not Remove
* an attempt at own layout
* typematrixed dvorak
* columns shifted
columns shifted out, second pinky column moved to the inside.
* Update users/romus/romus.h
* code cleanup
Changes requested by Drashna + Tap Dance enabled
* Fixed EOF
Fixed the no newline at the end of file alert.
* rgblight fight eeprom writes
* rgb code simplification
* Update users/romus/README.md
* Update quantum/keymap_extras/keymap_slovenian.h
* Main folder
Main folder with some changes like the base layout and matrix for uploading in a future to the qmk repositorie
* First Commit
Firsts non previously commited changes:
-Changed to keyboards/handwired
-Basic credit to Xydane
-70% Layout
* Modified file structure for several keyboards
As I don't want to create several folders and overcrowd the main folders I made a few modifications to being able of configure several keyboards as revisions of the main keyboard.
Added a second variant.
Compiling tests went right but I haven't tried it on the controller.
* Starting leds
* Started dual color leds PWM functions and configs
I started to create the PWM functions and configs based on internet examples, it doesn't compile yet
* Backtraced a bit to establish and try debug before continuing the pwm
Just this, algo some doc as a new pinout image, space cadet modification to try if it works and little more
* Deleted unuseful stuff
After trying the reestructure to being compatible with several keyboards and that it worked I deleted the other keyboard.
Added space cadet shift to ISO.
Finally I couldn't debug everything and I'm getting quite frustrated to continue much more than just adding pwm leds
* Changed again Iso fix for Space Cadet
* Renamed keyboard, future pull
I just renamed the keyboard and made some simplifying changes in order to make a pull request sometime soon.
I'm too frustrated, tired and knowledge limited to achive using the PWM for leds, I didn't even get to use the debug mode...
I intend to end basic led color change using layers (if I can), document everything properly and make a pull request so other users can continue/use this project.
* Writed Readme.md file
I also corrected a previous compilation problem and ordered a bit the keymaps
* Corrected readme
* Try to add layer activated light
* Revert "Try to add layer activated light"
This reverts commit 205af820d8.
* Progress to fork
Coming back to work, upcoming pull
* Linked image
Corrected readme
* Some cleanning
Added images to readme, som cleaning, burning after commit.
* Almost finished (working)
Finally
* Finished bluepill firmware
Just finished and tried layer dependant led colors. Going for merge
* Deleted innecesary stuff and trailing spaces
Just as commit title said.
* Coding conventions
Just modified some files to respect coding conventions
* Deleted XXXXXX define
Checking some other PR seen this improvement
* Changes suggested on PR
Firs doing the easy changes
* More changes for the PR
-I also deleted one unused function for led toggling on matrix.c (Now it uses layer dependent baklight, algo on of on start)
-Deleted commented function on keymaps.
Right now only needs testing and all pragma replaces.
* Almost every pragma change on PR
That's almost finished, only waiting for reply due to compiling errors
* Revert "Almost every pragma change on PR"
This reverts commit 07f23aa862.
* Revert last commit
I moddified by mistake a file from another keyboard
* Solved last pragma
Compiles fine.
Now I only need to test it, I say you if it works to include it in the main repository.
* helix/serial.c add support PD1,PD3,PE6 and configuration simplify
* Add comment about ATmega32U4 I2C
* Add compile time check for ATmega32U4 I2C
* change TAB code to 8 SPACE code
* Helix serial.c PORTD,PD0 test. OK
OK PD0
- PD1
OK PD2
- PD3
- PE6
* Helix serial.c PORTD,PD1 test. OK
OK PD0
OK PD1
OK PD2
- PD3
- PE6
* Helix serial.c PORTD,PD3 test. OK
OK PD0
OK PD1
OK PD2
OK PD3
- PE6
* Helix serial.c PORTE,PD6 test. OK
OK PD0
OK PD1
OK PD2
OK PD3
OK PE6
* Helix serial.c: PD0,PD1,PD3,PE6 all test end
* Helix serial.c: rename SOFT_SERIAL_PORT to SOFT_SERIAL_PIN
* Helix serial.c add debug code
* Helix serial.c: add transaction ID range check
* Helix serial.c debug code update
* Helix serial.c debug code update
* Helix serial.c: Strict checking of the value of tid.
* adjust the delay of serial.c
* Helix serial.c: remove debug code
* remove EXTRAFLAGS += -DCONSOLE_ENABLE from five_rows/rules.mk
tmk_core/common.mk has
>ifeq ($(strip $(CONSOLE_ENABLE)), yes)
> TMK_COMMON_DEFS += -DCONSOLE_ENABLE
* Fix error handling in split_scomm.c
* add some comment to serial.c
* add some comment about SELECT_SOFT_SERIAL_SPEED
* adding my keymap
* updated pull request comments from dashna, including redundancies and DVORAK entirely
* changed over visual representation to use 'LAYOUT_preonic_grid()'
* added a ReadMe and commented out AUDIO_ENABLED related stuff in keymap.c until I can align with current QMK standards
* Update readme.md
* readme corrections and adjustments
* Docs: newbs_learn_more_resources.md: formatting
* Added QMK Git Conventions doc, initial version
* Renamed contributing_qmk.md to newbs_best_practices.md
* Updated per review by @drashna
* Added navigation links
* Updated to Best Practices doc
* Minor updates to Learn More Resources doc
Markdown formatting consistency because I'm particular about it.
* Added Merge Conflict section to Best Practices doc
rgblight_effect_alternating (void) calls rgblight_sethsv_at () RGBLED_NUM times. As a result, rgblight_set () is called RGBLED_NUM + 1 times. This is wasteful processing.
* remove clmk and dvrk and backlight; switch esc and enter to be modtap; add meh key
* change songs
* space cadet; move enter; move '"; move pgup pgdn
* remove extra songs
* update from noahfredrick keymap
* make it easier to type ../../thing/*/*
* move pipe
* requested changes
* Added base keymap
* Added initial layers and mirrored most of Pok3r behavior.
* Some stuff for Space Captain
* 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
* Added DVORAK and COLEMAK
* Caps + enter + space for flashing mode.
* Added RGB status
* added flash script
* Changed lighting modes to make layers more apparent
* fixed issue with not being able to exit gaming mode.
* Added abbreviation constructor
* Changed lighting modes to make layers more apparent
* fixed issue with not being able to exit gaming mode.
* Added abbreviation constructor
* Fixed bug with SQL Table Macro generator.
* restructured file. No Logical changes.
* literals only for smart macros
* removed extraneous pointer declaration.
* Smart Macros
* Added Makefile and header file
* extended smart macros to be able to cover the whole alphas.
* removed non-relavent keymaps.
* didn't mean to include this guy.
* added my keymap
* Adde more changes
* Moved to pevecyan folder
* Added slovenian mapping
* Slovenian keymap completed
* Suggestions updates
* Fixes on slovenian keymap
Made some typos in previous iteration
* Fix LAYOUT define generation
Prior to this, only the full keyboard path was defined. Eg `KEYBOARD_planck_rev6`.
But the docs mention `KEYBOAD_planck`, which never actually gets defined.
This addresses this, and creates a define for each level of the keyboard folder, so that stuff like `KEYBOARD_planck` actually exists.
* Clean up changes to make it more readable
* Make some keys more accessible, prevent mistypings
* Add "Gaming" layer which maps L-Ctrl to space (left-handed jumping compatibility-mode for all games)
* Fix up userspace after feature merges
* Add new macros for keyboard layouts
* Keep new layouts in keymap for easy reference
* Cleanup layouts
* Fix CRKBD wrappers
* Fix up comments
* Fix spacing in orthodox base layer
* ergodox related cleanup
* Make KC_MAKE only flash when holding shift
* Add option to fast compile boards
* Clean up rgb modes to save space
* Re-enable Swap Hands on my Iris
* Add files via upload
* Delete config.h
* Delete keymap.c
* Delete rules.mk
* Keymap w/mirror mode and steno support.
Keymap w/mirror mode and steno support. Can be used entirely one handed.
* Fixed some niggling issues.
It was not properly including the "config_common" files, and was causing it to break on the configurator.
Additionally, updated this to use the split common code.
* RGB toggle button
* Remove custom lighting effects
* Fix small bug in Symbols layer
* Ignore mod tap interrupt in XD75 for skewwhiffy, and split layers into two for more flexibility and fix persistent layer issue
* Replace shift in nav layer with IntelliJ omnibox shortcut to avoid a sticky shift
* Remove custom setting in config, because it were annoying, it were.
* Move navigation buttons in one key
* Some review markups
* Use enums for layers
* Use LAYOUT_ortho_5x15
* Revert some capitalization changes made by accident
* DZ60 layout based on stephengrier's with customisations.
* CapsLock is used as Fn key.
* Del is available as Fn+Backspace & Shift+Backspace (using a macro)
* PgUp / PgDn / Home / End = Fn+Arrows (as on macOS, Microsoft Surface)
* Tilde = Shift+Esc
* Backtick = Fn+Esc
* Underglow toggle and mode selection are available as Fn+Q and Fn+W
* Reset (bootloader mode) = Fn+B
* Standardised layout formatting and Ctrl+Del & Shift+Del support.
Using 7 underscores for KC_TRNS in layouts and aligning the keycodes
according to LAYOUT_directional.
Del is now only Fn+Del, Ctrl+Backspace translates to Ctrl+Del,
Shift+Backspace translates to Shift+Del.
* Documented new Backspace/Del related macros.
Del is now just Fn+Backspace, pressing Ctrl+Backspace sends Ctrl+Del,
pressing Shift+Backspace sends Shift+Del
* Orange75: cleanup and Configurator support update
`orange75.h`:
Moved `K014` to the second (number row) as the left half of a split Backspace (guessing at its true location; will need to be checked/tested after merge).
`info.json`:
Updated to match new `LAYOUT` macro.
`keymaps/default/keymap.c`:
- Updated to match new `LAYOUT` macro.
- Added layer mock-ups as block comments.
- Formatted to be a bit more readable.
* Orange75: deleted an extra comma from keymap.c
* Helix each keymap's using rgblight mode symbol instead magic number
No change in build result.
* Helix pico keymaps: make rgblight modes selectable.
No change in build result.
* Helix rev2 keymaps: make rgblight modes selectable.
No change in build result.
* fixed Helix froggy/keymap.c: invalid rgblight mode value 0 to 1 (=RGBLIGHT_MODE_STATIC_LIGHT)
* Deselect RGB_TEST and ALTERNATING in Helix rev2,pico keymaps config.h.
Added hid_listen USB device for arm_atsam USB protocol.
Debug printing is now done through the console device (CONSOLE_ENABLE = yes) rather than the virtser device, for viewing in hid_listen.
Function dpf(...) renamed to CDC_printf(...) and should now be called directly if intending to print to the virtual serial device.
* IRIS Keyboard Keymap
I wanted a keymap that really changed things up. I also found that as a programmer I need as many symbols as I can get.
* Make cmd-option-escape work on a mac
* Add more prettyfication.
* Add other types of hold
* More work on the layer keys
* tweaks
* More tweaks.
* more tweaks
* Remove OSL/OSM they didnt seem to work very well
* DC01 updates and I2C avr speed overwrite
- General updating of DC01
- Made F_SCL define in AVR I2C driver overwritable from config.h
* Update drivers/avr/i2c_master.c
* syncing upstream
* Bluetooth Doc update
More Description in bluetooth section, Addition to Config options rules.mk section.
* merge upstream
chibios
* lib/chibios checkout
* Additional EZ key Section
added back EZ-Key diy link, Cleaned up some errors
* Personal Nyquist keymap added.
* Responded to comments for PR.
Removed unnecessary imports.
Updated way of macros.
Removed tick from unicode inputs.
* formatting in keymap
* Update and clarify Unicode documentation
* Fixed UCIS info based on feedback from algernon
* Further clarifications and cleanup
* Formatting
* Add an example for unicode map
* fix AutoHotKey title
* Implement macro recording
* Remove off-by-one from the macro recorder
* Holding both modifiers enables the third layer
* Exit the 3rd layer into one of the secondary ones
* Regular Enter and Escape on the secondary layers
Useful for the macro recording because the "tap" modifiers always act as
modifiers there.
* Remove the buffer overflow from the macro recorder
When the limit is reached, the backlight blinks with each keypress.
* More robust macro recording implementation
* Macro record refactoring and improvement
- support for a second macro (saved using the end of the macro buffer)
- improved reliability
* Add comments to my macros
* Macro recording: remove a redundant code
* Separate the raise+lower layer from the special layer
* Add back/forward keys
* Bind mouse movement
* More readable KC_TRNS
* Improve the mouse bindings
* Use a convenience macro instead of the low-level ACTION macro
* Add mouse to the Dual layer; make most of the layer transparent
* New "mouse" layer; clean up the "special" layer
* CapsLock, NumLock and ScrollLock on the Special layer
* Enable my fix for the stuck modifiers and adjust the dual layer to it
* Fix the macro recording after enabling the stuck mods fix
* Click with Lower/Raise+Space
* Reduce the memory used by the macro recording
Previously the auxiliary layers were numbered 30 and 31 which resulted
in all 32 array elements being allocated regardless of the actually
used layers in the user code.
* Optimize source_layers_cache for the cache memory
Swapping the array indices should increase the locality of the memory access.
* Remove the mouse layer
* Use update_tri_layer to simplify the code
* Add some custom per-keymap build options
* Add ShiftLock
* Secure the reset button
* Add numeric layer
* Remove explicit layer keys on LW and RS layers
* Replace Alt+left/right with Back/Forward keys
* Sleep/delay key (for macro recording)
* App/menu key
* Fix stuff after merging to master
* Local per-keymap config.h; minor cleanup
* Remove the old macro_record.h
Replaced with dynamic_macro.h
* Adjust my keymap to the current API
* Pure Pro Gaming layer
Accessible by double tapping the Pure Pro layer. It features switched
Lower and Raise layers, for one-handed access to numbers.
* Pure Pro Gaming layer: no Mod4, persistent number layer under RShift
* Pure Pro Gaming layer activated with long press, not double press
* Reduce the size of the vifon keymap
See: issue #930
* Increase the dynamic macro buffer
The default was actually decreased. The actual used value didn't change.
* Add the context menu key
* No more strange ideas in the gaming layer
* Reduce the firmware size by disabling API_SYSEX_ENABLE
* Make slash available on the PP layer (replaces the RESET key)
* Add a generic "hold this key" macro
* Add a missing undef
* Turn LGUI in the gaming layer into LW instead of disabling it
It's not as disruptive as LGUI and it makes the LW/RS order kind of
more consistent (LW on the left, RS on the right).
* Refactor the Pure Pro Gaming layer
* Try out the 1st party qmk KC_LOCK (vs my own KM_HOLD)
* Alternative way to switch keyboard layouts with the left hand
* Add dot & slash to the Pure Pro layer (but not to the Gaming layer)
* Now that there is a second KM_LW, we can simplify the layout a bit
It was confusing to have the modifiers completely swapped. Just
moving them is much more natural.
* Disable the console now that qmk got bigger
* Update the keymap for the modern qmk standards
Adds maximized DZ60 Plate B layout macros in ANSI and ISO, featuring 2.25u Left Shift (1.25u/1u split for ISO) and 1.75u Right Shift with Inverted-T arrow keys. Also supports Split Spacebar and Split Backspace.
This allows user code to continue to use the matrix for indication, even
when the RGB toggle is off, using rgb_matrix_set_color().
Without this change, it's impossible for user code to use the matrix
when the toggle is off, as any changes get overwritten with black on the
next task cycle, and the indicator code is not called at all.
There is `qk_ucis_symbol_fallback` for the case where symbol lookup
fails, but there wasn't one for the success case. This adds
`qk_ucis_success`, called after successfully finishing the UCIS symbol
input.
Thanks to @drashna for the idea!
Signed-off-by: Csilla Nagyné Martinák <csilla@csillger.hu>
* Added pteron files made via from kbfirmware.com.
* Added readme.
* Made some progress on Pteron keymap.
* More keymap.
* Updated bootloader, added some keymap illustrations.
* Moved default keymap to FSund, made default keymap from default preonic keymap.
* Fixed typo in default pteron keymap.
* Made changes recommended by drashna.
* handwired/ibm122m: refactor
Refactored layout macro and keymaps to more closely resemble the keyboard's physical layout.
* handwired/ibm122m: add Configurator support
Enable support for ubuntu-derived linux-es in installer
Checks /etc/os-release for mention of ubuntu and debian.
Linux Mint uses ID_LIKE=ubuntu, not ID_LIKE=debian (as seen in
Ubuntu 16.04, unsure about others)
* Update userspace with common config.h
* Add my dz60, satan and xd75 keyboard keymaps
* Fixing executable bits changed during last upstream merge
* Cleanup unnecessary files and defines
* Remove unnecessary defines from userspace config
* Generate a new project for the KBD4x
* Specify the possible layouts for the KBD4x - MIT and grid
* Fill out the readme for the KBD4x
* Configure the default keymap and wiring configuration as specified on http://qmkeyboard.cn/
* Add info.json for QMK Configurator
* Enable backlight support for the KBD4x
* Standardise on LAYOUT_planck_mit/LAYOUT_ortho_4x12 layout names
* Add whitespace so the Readme will render correctly
* Disable mouse keys support for the KBD4x to make the firmware small enough
* DZ60: Deleted K214 from LAYOUT_all
* DZ60: Delete matrix LAYOUT_2_shifts; replace with LAYOUT_all
After the deletion of K214 from LAYOUT_all, LAYOUT_all and LAYOUT_2_shifts are identical.
Deprecated LAYOUT_2_shifts in favor of LAYOUT_all.
* DZ60: refactor 256k_HHKB and itsaferbie keymaps to use LAYOUT_60_hhkb macro
Both keymaps previously used the LAYOUT_hhkb macro. After comparing the macros, the only difference between them was that LAYOUT_hhkb included the place of the ISO Backslash key. Neither keymap used this key, so both were refactored to use LAYOUT_60_hhkb instead.
LAYOUT_hhkb is now essentially unused by any keymaps in the repo. (More on that in a moment.)
* DZ60: bugfix for dbroqua keymap
This keymap had two layers that used the LAYOUT_true_hhkb macro and a third that used LAYOUT_hhkb. These macros have the same number of keys, but represent different physical layouts. As the "main" layers used LAYOUT_true_hhkb, switched the third layer to LAYOUT_true_hhkb as well.
The LAYOUT_hhkb macro is now unused by any DZ60 keymaps in the repo, and can be safely deleted.
* DZ60: bugfix for 60_ansi_arrow_fkeys, 60_plus_arrows, and stephengrier keymaps
All three keymaps had one layer in LAYOUT_all and one in LAYOUT_directional. Only difference between these macros is LAYOUT_all excludes the ISO Backslash position. As none of the keymaps used this position, all layers were switched to use LAYOUT_directional.
* DZ60: added layout mock-ups to dz60.h
Documenting the physical layouts that go with each matrix.
* DZ60: replace TMK SHIFT_ESC with QMK Grave Escape
Replaced all instances of keycodes that called TMK's ACTION_FUNCTION(SHIFT_ESC) with QMK's KC_GESC, and added config.h files so KC_GESC behaves as the deprecated TMK function did, except for the default keymap, which I thought should have the QMK standard behavior.
* DZ60: delete SHIFT_ESC code blocks
Deleted ACTION_FUNCTION(SHIFT_ESC) code blocks from keymaps that didn't use the functionality it provided.
* DZ60: deleted unused MODS_CTRL_MASk definitions
Was used in the now-deleted SHIFT_ESC code blocks. Interestingly named MODS_CTRL_MASK when it was actually checking the Shift keys. *shrug*
* DZ60: refactor jkbone keymap to use process_record_user
Replaced TMK action_function keycodes with QMK process_record_user equivalents.
* DZ60: delete unused layout macros
The macros LAYOUT_hhkb, LAYOUT_directional_625_space, and LAYOUT_60_ansi_split_bs_rshift_5x1u were unused by any keymaps in the repo, and have thus been deleted.
* DZ60: refactor iso_6u_space and iso_7u_space keymaps
Both keymaps refactored to use the LAYOUT_60_iso macro.
* DZ60: refactor dz60.h
Updated the notation of the switch arguments. Format is now:
`k<row><column>`
where `<row>` is `[0-4]` and `<column>` is `[0-9a-e]`.
* DZ60: refactor LAYOUT_60_iso_5x1u matrix
Updated matrix so `KC_ENT` belongs on the home row, which is consistent with LAYOUT_60_iso for the DZ60 as well as the ISO community layouts.
* DZ60: fix white space in dz60.h
I hate when indentation is inconsistent within a file.
* Enabled unicode support and send_unicode function
* Unicode cleanup
* More unicode tweaking
* Update EEPROM stuff
* Account for keyboard macros
* Switch Equal to Plus on Ergodox
* more tweaks
* Minor Unicode tweaks
* Correct matrix printing for keylogger
* Fix unicode functions
* Fix unicode mode set since it actually uses EEPROM
* Re-add DISABLE_LEADER
* Ergodox is easier to hit the tapping term, fix that
* Fix stupid type on unicode mode check
* Preliminary CRKBD/HeliDox support
* Fixes to Helidox
* Cleanup userspace from old merge stuff
* Remove CCCV sounds
* Make Mode NOEEPROM Again
* Add send_string_unicode function
Co-authored-by: kdb424 <kdb424@gmail.com>
Co-authored-by: Konstantin <vomindoraan@gmail.com>
* Clean up code based on feedback
* Fix includes
* Add Function level EEPROM configuration
Add kb and user functions for EEPROM, and example of how to use it.
* Bug fixes and demo
* Additional cleanup
* Add EEPROM reset macro to example
* Forgot init function in list
* Move eeconfig_init_quantum function to quantum.c and actually set default layer
* See if removing weak quantum function fixes issue
* Fix travis compile error
* Remove ifdef blocks from EECONFIG so settings are always set
* Fix for ARM EEPROM updates
* Fix merge issues
* Fix potential STM32 EEPROM issues
* Use proper function levels
* Add matrix init functions
* Convert KEYMAP to LAYOUT
Or @mechmerlin is going to hunt me down and harm me... probably :)
* Fix conflict issues
* Add personal KC60 keymap
* Update personal KC60 keymap
* Keymap update 2018-05-30 01:53 UTC-7
* Added macro: T_PEEKR
* Added macro for MacOS Select All; modified MacOS function layer
* Added git branch-name macro
* Added GitHub signature macro
* Added readme files
* Added Quake 2 and System layers
* Refactored keymap readme
* Refactored to add userspace files; added Colemak layer
* Minor code cleanup; updated readme files
* Reverted use of userspace
Decided not to make use of the Userspace feature at this time. Reverted its addition, and updated the readme files where needed (they were linking to userspace files).
* Updated per review comments by @drashna
* Refactor buggy macros
I'm still not sure these work properly
* Fix Windows shortcuts
* Fix Mac shortcuts, possibly
Untested; still may be broken.
* Remove PREVENT_STUCK_MODIFIERS from config.h
Deprecated by #3107
* Custom keymap for the ErgoDone
The keymap supports QWERTY and COLEMAK MOD-DH with LED indication.
* Enable Space Cadet Shift
* Fix after-boot layer indicator LED
* Implement keyboard suspend, move layer LED handling to function, unify
identation
* Add readme.md with layout
* Optimize LED handling, add include guard
Read the default layer via the proper EEPROM function, so the calling of
bootmagic() is no longer necessary.
Fix bug when the CapsLock LED wasn't working anymore after a layer
switch.
* deleting arkag branch, forcibly moving changes over to master
* fade_color function added, not tested
* added half functions some stuff
* surround_type function implemented and working.
* added flashing function and removed fading, flashing supports infinite flashing along with controlled number flashes
* added a fade state machine and functionality
* build optimizations, changed fade to bounce between bounds rather than roll over, added a HALMAK layout
* changes to sleep breath function, changed how I will switch to HALMAK
* support for halmak added
* support for activity detection added, condensed fading and flashing state machines, removed support for HALMAK and COLEMAK because arkag is stupid
* changed sleep and inactive behaviors, now the color shifting reverses on state change, yay! save_color and reset_color are made to enable layer color changing to look cooler.
* reformatted some if statements in state detection
* changes to force fade to pause on boot, or plug in.
* Attempting to move over to userspace, pushing to repository for help
* userspace stuff....
* userspace stuff....
* layout changes, working userspace,
Removed left side shift and replaced it with a MT() for LSFT and SPC. Userspace seems to be working properly now! HURRAY
* Layout change
Removed space/shift and reset modifiers to what they were originally. Added homerow modifiers.
* Removed excessive tabs in files
* Moved mods on homerow around...
* changes recommended by @drashna
* removed homerow mods, more flashy lighting!
* changed delays for lighting.
* velocikey code retro fit into userspace to match typing speed
currently "working" but isn't as reactive as I want.
* Readme and other documentation hidden throughout code
* Added a pretty picture
* pretty picture actually added
* More readme updates
* Velocikey now working inside my userspace!
* Changed repo macro and fixed readme
* Removed media layer, moved media control to LAZY layer
* fixed more merge issues when I had to merge...
* implemented some leader key stuff
* removed merge garbage...
* changes requested by @drashna, leader key switch from macros
* Add basic support for the YD68 / YD68v2.
Keymap and WS2812 underlighting work. Capslock LED should work, though I don't have one populated to test. Backlight LEDs are not set up, as they're not on a hardware PWM pin, could be set up as software.
* Fix Imgur link
* Fix default keymap to match the stock firmware
* Fix the Hardware Supported line and add a short description
Messed up in my previous PR (#4017) by providing the wrong matrix name.
Fixing by changing the matrix name instead, because there's only one at this point. Thought it made more sense this way.
* Helix: make rgblight modes selectable.
No change in build result.
* edit the comment of helix/rev2/keymaps/default/keymap.c
* Helix led_test keymap: reduced the size.
* Disable Leader to reduce firmware size for Travis
* Additionaly fixes to USB_USB\BLE Keyboard converter
* Disable One Shots to get USB to USB BLE converter to fit
* Update for SEND_STRING usage
Update for SEND_STRING usage.
Sending keyboard reports (kbd, nkro) now obey the minimum polling time.
While attempting to send a keyboard report and waiting for a USB poll, other functions of the keyboard, including LED effects and power management, will continue to operate at their intended intervals.
* Updates for send string, syscalls, stdio, debug prints, auto shift
Now properly waiting for previous keys sent over USB to complete before sending new.
Added heap to linker and now compiling with syscalls support.
Removed custom string functions and now using stdio.
dprintf now works as intended through virtser device.
* CTRL and ALT keymap updates
CTRL mac keymap updated
ALT default and mac keymap updated
ALT rules.mk added Auto Shift with default no
* Code cleanup as per discussion with vomindoraan
Code cleanup as per discussion with vomindoraan
Specifically, an "L" got appended to the controller names for te "valid types",
but did not get appended to the blocks that include the specific drives.
So, this breaks anything that isn't "Yes".
* Update quantum matrix to support both AVR and Chibios ARM
- Addition of STM32 pin definitions
- Created abstruction layer defines to control GPIO (This is a bit pointless for Chibios as we are creating a PAL ontop of a PAL but it is necessary for uniformity with AVR)
- Modified matrix.c to use the above functions
* minor ifdef fix
* Rename of functions and docs
- Added documentation.
- Renamed functions according to Jack's spec.
* Massdrop fix
* Update matrix.c
* Update quantum.h
* Update quantum.h
* Update quantum.h
* Update internals_gpio_control.md
* Add pragma once info to contributing guidelines
* Fix links in readme template to match doc site
* Revert changes to contributing doc as somebody already changed it
* model01: implement RGB matrix feature
LEDs can still be individually controlled if this is switched off.
* model01: use fast banked LED setting commands
* model01: update default keymap to use RGB matrix
* model01: update RGB matrix support to match common_features.mk
* rgb_matrix: include <string.h>
This was missing after commit 4d5705ea6c
which introduces a use of memset().
* model01: make g_rgb_leds weak
This allows users to override which LEDs are configured as
modifiers, or tweak the x/y coordinates, should they so choose.
* add 'mavrdude' target into tmk_core/avr.mk
I made it a little convenient when writing the same binary to multiple Pro Micro.
* rename target name 'mavrdude' to 'avrdude-loop'
* modify docs/flashing.md about avrdude-loop
* mdify docs/flashing.md again
* modifi docs/flashing.md 3rd
Rather than a define, but read from the define. This way, a smart coder could externally configure the randomness, changing it on the fly
This is also a precursor step to adding full on support for configurable randomness.
* Initial commit of RAMA U80-A
* Initial commit of RAMA U80-A
* Moved IS31FL3736 driver, minor cleanups
* Superficial stuff
* Review changes
* Refactored to use common code.
* rgb_matrix: use a driver ops struct
This is intended to avoid #ifdef proliferation on adding more drivers,
eg. model01, which use different architectures.
* rgb_matrix: document driver struct members
* rgb_matrix: remove unused LED testing code
* rgb_matrix: don't build into IS31x drivers unless being used
* rgb_matrix: refactor make config options
This ensures that the necessary files are included for any custom
RGB_MATRIX_ENABLE value, without having to add entries here for specific
boards. This particularly affects model01 because its controller is
integrated and won't be used anywhere else, so it's preferable not to
put it in common_features.mk.
This now validates the value of RGB_MATRIX_ENABLE.
It was necessary to fix an error in ergodox_ez rules.mk using the wrong
comment separator, yielding an invalid value.
* IS31x drivers: don't write the control registers all the time
This is only needed when they are changed. This is done in init() and
board- or keymap-specific code is free to make further changes.
* rgb_matrix: move structs from chip drivers to rgb_matrix_drivers.c
This approach is specific to the rgb_matrix functionality, so keep it
neatly separated from the raw chip drivers.
* holefully correct error in mtdjr userspace for layer_state_set_user
* return state and wrap rgb actions in their own conditional
* mtdjr nyquist and userspace updates
* mtdjr updates as requested
* pull out toad keyboard and get it compiling
* refactor xmmx
* use the correct LAYOUT macros
* move LED code out to toad.c file
* move LED code out to xmmx.c file
* adjust for correct number of columns and pins used
* remove led set user
* Rename constexpr keymap folder to konstantin
* Replace numpad comma with Unicode comma
* Rename tap dance constants
* Move record->event.pressed check into switch
* Use RShift as a dedicated Fn key
* initial commit
* Update readme.md
* Update keymap.c
added comment for description of function to control LED as layer indicator
* corrected formatting as requested.
* format for configurator
* corrected info.json to propertly reflect layout in Configurator
* updated layouts to reflect physical keyboard
* comment out BACKLIGHT BREATHING in config.h
* deleting arkag branch, forcibly moving changes over to master
* fade_color function added, not tested
* added half functions some stuff
* surround_type function implemented and working.
* added flashing function and removed fading, flashing supports infinite flashing along with controlled number flashes
* added a fade state machine and functionality
* build optimizations, changed fade to bounce between bounds rather than roll over, added a HALMAK layout
* changes to sleep breath function, changed how I will switch to HALMAK
* support for halmak added
* support for activity detection added, condensed fading and flashing state machines, removed support for HALMAK and COLEMAK because arkag is stupid
* changed sleep and inactive behaviors, now the color shifting reverses on state change, yay! save_color and reset_color are made to enable layer color changing to look cooler.
* reformatted some if statements in state detection
* changes to force fade to pause on boot, or plug in.
* Attempting to move over to userspace, pushing to repository for help
* userspace stuff....
* userspace stuff....
* layout changes, working userspace,
Removed left side shift and replaced it with a MT() for LSFT and SPC. Userspace seems to be working properly now! HURRAY
* Layout change
Removed space/shift and reset modifiers to what they were originally. Added homerow modifiers.
* Removed excessive tabs in files
* Moved mods on homerow around...
* changes recommended by @drashna
* removed homerow mods, more flashy lighting!
* changed delays for lighting.
* velocikey code retro fit into userspace to match typing speed
currently "working" but isn't as reactive as I want.
* Readme and other documentation hidden throughout code
* Added a pretty picture
* pretty picture actually added
* More readme updates
* Velocikey now working inside my userspace!
* Changed repo macro and fixed readme
* Removed media layer, moved media control to LAZY layer
* fixed more merge issues when I had to merge...
* create: biacco jis keymap for windows for Ergo42
* fix: biacco-winjp: change #ifndef to #pragma once.
* fix: following: 3935#pullrequestreview-157941685
* Pin avr-gcc in shell.nix pending release of 8.3.0
There's apparently a critical bug in 8.2.0, which is now the nixpkgs default. This change overrides that default in favor of the known good version. Once 8.3.0 is the default, the override can be dropped.
* Arch/Manjaro fix
* First version of FollowingGhosts' custom layout
* Added copyright etc.
* Fixed readme and added space cadet shift
* Moved from RGB to HSV, updated readme and added media keys
* Updated pragma
* Added play/pause and updated config
* Added pragma back
* added my planck keymap
based on a blend of my minivan keymap and the planck default keymap.
* moved pipe to better match minivan keymap
* updated as per @drashna
also moved my keymap a bit after adding the quad encoder and underglow
(which doesn't even work on arm right now lol)
* a few smaller tweaks
* Crkbd: move I2C and Serial defines to keyboard's config.h
per @drashna on Discord
* Crkbd: remove misleading comment re: I2C and Serial
USE_I2C and USE_SERIAL are usually a "one or the other"-type deal, but this keyboard uses both.
* funged git history, restarting
* tested and working (message typed on this)
* updated documentation to include wiring directions
* formatting
* updated matrix and default layout a bit
* getting ready for merge into main repo
* getting ready for merge into main repo v2
* cleaning
* cleaning repo of extranious files
* updated documentation
Added a sample circuitry for handling the connection of a PS/2 Mouse.
Even if it's written that a circuitry is needed, there're a lot of other
things and the information gets lost really fast. A really simple sample
helps to remember who wants to implement the functionality about the
circuitry.
* initial check in
* figure out the column pins
* temporary keymap
* guess the row pins
* fix matrix.c compilation errors
* use the LAYOUT_60_hhkb macro and tweak the keymap a little bit
* update readme
* Put my name everywhere
* Add QMK Configurator support
* figured out the row pins
* update readme to have reset info
* Fill in some blanks that are documentation related
* Update matrix.c
* add kb functions
* forego kbfirmware labeling
* add arrows and caps lock to function layer.
* add a LAYOUT_60 and LAYOUT_all macro
* missed a comma
* add configurator support for the two new LAYOUT macros
* Jack helped me with a new custom matrix
* add 60_ansi into rules.mk
* deleting arkag branch, forcibly moving changes over to master
* fade_color function added, not tested
* added half functions some stuff
* surround_type function implemented and working.
* added flashing function and removed fading, flashing supports infinite flashing along with controlled number flashes
* added a fade state machine and functionality
* build optimizations, changed fade to bounce between bounds rather than roll over, added a HALMAK layout
* changes to sleep breath function, changed how I will switch to HALMAK
* support for halmak added
* support for activity detection added, condensed fading and flashing state machines, removed support for HALMAK and COLEMAK because arkag is stupid
* changed sleep and inactive behaviors, now the color shifting reverses on state change, yay! save_color and reset_color are made to enable layer color changing to look cooler.
* reformatted some if statements in state detection
* changes to force fade to pause on boot, or plug in.
* Attempting to move over to userspace, pushing to repository for help
* userspace stuff....
* userspace stuff....
* layout changes, working userspace,
Removed left side shift and replaced it with a MT() for LSFT and SPC. Userspace seems to be working properly now! HURRAY
* Layout change
Removed space/shift and reset modifiers to what they were originally. Added homerow modifiers.
* Removed excessive tabs in files
* Moved mods on homerow around...
* changes recommended by @drashna
* Added template copies for prime_l
Added first set of files for prime_m and prime_o
Temporarily storing kbfirmware dumps in tmp
* Completed base for prime_m, prime_o and prime_l
Moved prime_r into primekb folder
* Added in QMK Configurator layout files for new PrimeKB keyboards
Slight modification to layout header files
Added my name to licensing
* Updated primekb readmes
* Removed temporary working files
* Updated default keymap for Prime_O
* Added link to Newbs Guide in prime_r readme
* make bpiphany directory with simple readme file
* move unloved_bastard to bpiphany directory
* move frosty_flake to bpiphany directory
* move pegasushoof to bpiphany directory
* move tiger_lily to bpiphany directory
* add a little more info to readme
* move kitten_paw to bpiphany directory
* update make instructions
* update intro text
* add missing routines to matrix.c of unloved_bastard
* add missing routines
* initial commit
* Update readme.md
* Update keymap.c
added comment for description of function to control LED as layer indicator
* corrected formatting as requested.
* format for configurator
* corrected info.json to propertly reflect layout in Configurator
* updated layouts to reflect physical keyboard
* Create layout for JD45
* Tweak layout to better support JD45 and add more tap dancing.
* Add Maltron and tweak layout for 40% enter compatibility.
* Switch back to `BL_TOGGLE` for backlight.
* More tweaks
* Rename talljoe_gherkin to talljoe-gherkin
* Make NAV layer tab C_S_T also.
* Add missing RESET key.
* Add Talljoe layout for minivan.
* MTI is not for me
* Tweak keymap.
* Add talljoe keymap to Atreus.
* Minor tweaks.
* Fix talljoe keymaps to work with new Zeal60 commit.
* Added QMK support for GSKT-00, PaladinSplit, PaladinTKL and PaladinPad pcbs
* Remove the paladin boards from this PR
* Changed gskt00 as per review comments. Added two new default layouts, 60_ansi_tsangan and 60_iso_tsangan
* Fix the layouts/default/60_iso_tsangan/layout.json file
* Removed ? from rules.mk, removed unused fn_actions from keymaps. Changed the 60_iso_tsangan to work correctly
* Removed PREVENT_STUCK_MODIFIERS
* Keyboard: add Keyboardio Model01
This port implements key scanning and everything in their default
keymap.
It doesn't implement mouse warping; QMK can't do that (yet).
LED control is mostly not implemented. The ability to set all LEDs is
included because they can get stuck on coming from the bootloader
otherwise. Single LED control is also implemented for numpad indication.
The scanners also support batch LED transfer which is what you'd need if
you wanted to do fast effects. Gamma correction is also not implemented,
but is present in the original firmware. The necessary info for further
implementation is in the KeyboardioScanner module for Kaleidoscope.
To install on your keyboard:
make model01:avrdude
When prompted, hold the "prog" key on the keyboard to put it into
programming mode. This can also be achieved by holding the "prog" key
while plugging in the keyboard. This works even if the firmware is
corrupt or missing.
Hot plugging the halves seems to work fine, but there is no explicit
support for eg. making sure the matrix scan rate is reconfigured.
* model01: clean up includes and include guards
Uses #pragma once everywhere.
* model01: split LED and matrix code
This makes space if someone wants to implement better LED support
later on, the keyboard is a lot more capable than the current code.
* model01: separate I2C timeouts for matrix vs. LED
If the scanners have no data they don't ACK reads and just time out.
So we want a pretty short timeout to keep scan rates high.
Meanwhile the LED transfers might take longer - I don't know though,
so here we are conservative.
* model01: implement better LED control
- gamma correction from the manufacturer's firmware
- suitable delays to allow back to back LED writes
- this is fast enough to write the whole keyboard without noticeable
delay, in my experience
- minor bug fix: RHS Fn key was not addressable
* model01: add license to wire-protocol-constants.h
* model01: replace gamma LUT
The original was of unclear license origin. This one is functionally
identical and includes a generator should people wish to adjust it.
* model01: use the already-present CIE1931 lightness curve
...rather than baking in another gamma curve.
It's said that CIE1931 is the right thing to be using rather than gamma.
OK. Let it be so.
* model01: call matrix_init_user() from matrix_init_kb()
* model01: remove inapplicable config options from rules.mk
* model01: readme.md: update build environment links
* Add flashing instructions for Linux
* Make device/manufacturer name consistent for ymd96
* Disable command mode by default for YMD96
* Add function call to fix backlight for YMD96
* Add personal YMD96 config
* Replace include with QMK macro
* Move KEYMAP macro to keymap-level folder
* Move custom KEYMAP macro to global LAYOUT_iso macro
* Change transparent keymappings to global definition
* Remove unecessary import and change to pragma once
- (instead of repeated ifdef)
* Remove global keymap/layout definition
* Remove chording as it is not documented, not used, and needs work.
* Make Leader Key an optional feature.
* Switch from `PREVENT_STUCK_MODIFIERS` to `STRICT_LAYER_RELEASE`
* Remove `#define PREVENT_STUCK_MODIFIERS` from keymaps.
* Arrow keys are now arranged on hjkl (vi style)
* The escape key is moved on capslock, shared with func layer switch
* The grave key is now dedicated (not shared with escape)
* Add a new numpad layer that can be activated with the spacebar
* Fix layout mismatch between layers
* Use bult-in underscore KC_TRNS alias
* add my config
* fix backlight, clean up that code
* group background code, restore static var
* qwerty is supposed to be in the middle
* wrap layer change backlight in ifdef
* backlight levels and some more 'emojis'.
* Restructure to make it possible to press cmd ent on the right side of the board with one hand.
* Expose the period through the number layer. Add Hyper keys to mouse layer
* reduce mouse speed
* add a : -P key
* Thumbs up and down, remove some keys that are duplicated via function keys, clean up
* fix build issues
* add various emoji
* duplicate default Meira keymaps
* Miera updates
* add documented but unmapped emoji
* Sound for the Meira, was stumped by a file size! Thanks drashna!
* add docs
* docs
* revert lib changes...
* clean up
* clean up
* remove make file
* Fixes missing key
* clean up
* add my lets split
* add more emoji
* add the telophase board (unofficially, I guess...)
* add missing files
* add/reset files
* Review feedback implementation: Not needed. Add #define FLIP_HALF to your config.h file instead.
* Review feedback implementation: All of these includes should be replaced with #include QMK_KEYBOARD_H.
* Review feedback implementation: [FAILING] You may want to use LAYOUT_ortho_4x12 instead, and move this to /layouts/community/ortho_4x12/ instead. That way, you can use the same keymap for all of the boards.
* clean up
* add a key for command tilde (osx loves it)
* at least its building again
* remove adjusts and migrate layer switching to MO(_LAYER)
* update the telophase readme
* update the telophase readme
* grahampheaths -> grahampheath
* ONEHAND_ENABLE -> SWAP_HANDS_ENABLE
* convert lets split to use ortho_4x12
* Move lets split keyboard layout into community/ortho_4x12
* make telophase use LAYOUT()
* I did it?!
* Add clap and grin
* swap tabs and back and forward
* whitespace
* Add ellipsis and thanks emoji
* Move flip_half to telophase config (conflicts with lets split layout)
* Use #pragma once instead of config_user_h
* remove unused stuff
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
* initial commit of keymap creation script
* create default keymap
* pass shellcheck
* provide a better usage message
* change printf string to more accurately reflect the path
* make it more easily understood
* found another typo
* add documentation regarding the new_keymap script
* enforce lowercase for userinputs
* add temporary test code rgblight-macro-test1.[ch]
* rgblight.h : mode auto numberring and auto generate mode name symbol
No change in build result.
* rgblight.c use RGBLIGHT_MODE_xxx symbols
No change in build result.
* quantum.c use RGBLIGHT_MODE_xxx symbols
No change in build result.
* fix build break. when RGB_MATRIX_ENABLE defined
* add temporary test code rgblight-macro-test2.[ch]
* modify rgblight_mode_eeprom_helper() and rgblight_sethsv_eeprom_helper()
* modify rgblight_task()
* configurable each effect compile on/off in config.h
* update docs/feature_rgblight.md
* fix conflict. docs/feature_rgblight.md
* remove temporary test code rgblight-macro-test*.[ch]
* fix comment typo.
* remove old mode number from comment
* update docs/feature_rgblight.md about effect mode
* Revert "update docs/feature_rgblight.md about effect mode"
This reverts commit 43890663fc.
* some change docs/feature_rgblight.md
* fix typo
* docs/feature_rgblight.md update: revise mode number table
* move tv44 to thevankeyboards directory
* move bananasplit to thevankeyboards
* move roadkit to thevankeyboards directory
* add a basic readme
* update readmes to correct the make instructions and add more help text
* rename tv44 to minivan as per Jack's suggestions
* update readme
* rename tv44 to minivan
* update tv44 to minivan
* change includes for tv44 to minivan
* remove extra includes
* rename alf_x2 to alf
* rename to x2
* rename dependencies
* Fix readme
* moved x2 into alf directory
* update readme for make instructions
* move dc60 to alf directory
* update dc60 readme for make instructions
* change readme txt as per noroadsleft PR comment
* ALT keymap update
Added additional End key on layer 1 to match key cap
* LED driver update addressing PR #3871
Update sync between IS31FL3733 drivers is causing varying behavior in keyboards including brightness mismatch and slight flicker at very low rgb values. Visually, disabling sync is not noticeable. Ref PR #3871 by guarnacciaa.
* add SCREEN_NAV layer for copy/pasting within screen
* working readreg/paste macros
* working read reg / paste macros
* write log and tran patterns, and expand
* add ls -la shortcut, add tab on combined layer
* put delete word on the right pinky key on shell_nav layer
* add TAB on the right side, add reset key
* added Cloud9 macros
* add cloud9 shortcuts to atreus layout
* added BROWSER_CONTROL layer
* finalized browser control layer
* adding comment
* add browser control layer to atreus
* add flashing command line
* remove the tab on combined layer
* remove the tomouse
* remove mouse layer, change log/tran expand patterns, cleanups
* add dumptlog macro
* add "delete to home" shortcut
* fix conflict
* remove unneeded mouse layer
* add meh shortcuts on the browser_control layer
* add/modify some macros
* explain the various layers
* putty paste is right mouse button
* Add own personal Contra layout
* Enable auto-shifting
* Enable tap dancing and implement Space Cadet-like shift with LSHIFT and ENTER
* Implement Colemak Mod-DH layout, clean up Adjust layer
* Implement keyboard and keymap refactor
More info: https://github.com/qmk/qmk_firmware/pull/3191
* Update the readme.md and keymap.c files for Colemak
* Add include guard, make layout description cleaner
* Updated info.json for Duck Jetfire
Generated a new info.json file. @mechmerlin asked my help in debugging this file. Firmware works as expected if built from source, but not if built from the Configurator.
* Corrected the position of the arrow keys in LAYOUT_all
* Fixed my ortho_5x12 layout
I've fixed the config.h file for my 5x12 ortho layout so that I can
now use it with my Nyquist.
* Update config.h
* Update config.h
Appearenly, teensy controllers have some issues with waking up. If the rgblight is called "too soon", it will cause the controller to lock up, intermittently. Adding a 10 ms
delay seems to fix this issue, as it lets it have enough time to handle things properly.
This has been tested extensively on my Ergodox EZ, and can be seen in the @drashna userspace, under the "suspend_wakeup_init_user" function.
* 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.
* 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.
* 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
* - 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
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.
* 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.
* 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
* 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
* 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
* 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
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.
- 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.
* 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.
* 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).
* 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.
* 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
* 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
* 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
* - 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
* 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
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.
* 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
* 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
* 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
* 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
* 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
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.
* 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
* 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
* 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.
* 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
* 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.
* 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
* 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
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.
* 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
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
* 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
* 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
* 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.
* 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
* 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
* 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
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.
* Add svorak a5
* Update Svorak A5 keymap
* Fix issue with special characters
The initial keymap did not account for non US software layout. Hence, the
special characters were incorrect. Since this layout is aimed towards Swedish
writing people the presumption is that whoever uses it will have Swedish as
their OS language.
Includes:
- Special character issue fixed
- QWERTY layer that can be toggled if requiered (also presumes Swedish software
layout)
* Add special characters and media keys
* Add ctrl, alt, etc. to functional layer
* AMJ96 Refactor
LAYOUT matrix and default keymap refactored to use full-length keycodes (instead of shorthand).
* Configurator update
Minor physical layout update and made the labels more sensible.
* Readme update
White space correction.
* Default keymap update: #include QMK_KEYBOARD_H
* rules.mk update
Disabled the following options as my local test compile's .hex ended up too big to fit in the available flash space:
MOUSEKEY_ENABLE
EXTRAKEY_ENABLE
BACKLIGHT_ENABLE
RGBLIGHT_ENABLE
If this is undesirable, suggestions are welcome.
* Config/rules update
Re-enabled MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, BACKLIGHT_ENABLE, and RGBLIGHT_ENABLE and disabled COMMAND_ENABLE in rules.mk; enabled NO_ACTION_MACRO and NO_ACTION_FUNCTION per @drashna
* Swapped `___` for `XXX` in amj96.h per @mechmerlin
* add configurator support
* update bface code to more modern QMK standards
* update readme
* update readme
* Make changes thanks to noroadsleft's PR comments
* first verion of skug
* zudvp layer added and new thumb cluster
* move del to arrw cluster and switch places of algr and no_circ
* first verion of skug
* zudvp layer added and new thumb cluster
* move del to arrw cluster and switch places of algr and no_circ
* rework layouts
* Adds SYMB layer toggle to 'ä'
Closes#2
Also moves ctrl away from '-' and 'z' to the outer bottom corners
and removes redundant SYMB layer binds from there
* Adds mouse movement to right hand on ARRW layer
Closes#3
* Fix typoed keycodes
* planck qwerty nordic
* Update README.md
* Update README.md
* Implemented changes to planck layout requested by drashna
* Implemented changes to ergodox layout requested by drashna
NOTE: `version.h` is still required.
* Added support for the b.face keyboard
This commit adds support for the 60% keyboard from winkeyless, the
b.face. The basic keyboard layout as well as the RGB backlighting
works as expected; the per-key LEDs can be turned on or off but not
yet dimmed. A default 60% US-layout is included.
* Added link to the bface in the ps2avrGB README
* add my config
* fix backlight, clean up that code
* group background code, restore static var
* qwerty is supposed to be in the middle
* wrap layer change backlight in ifdef
* backlight levels and some more 'emojis'.
* Restructure to make it possible to press cmd ent on the right side of the board with one hand.
* Expose the period through the number layer. Add Hyper keys to mouse layer
* reduce mouse speed
* add a : -P key
* Thumbs up and down, remove some keys that are duplicated via function keys, clean up
* fix build issues
* add various emoji
* duplicate default Meira keymaps
* Miera updates
* add documented but unmapped emoji
* Sound for the Meira, was stumped by a file size! Thanks drashna!
* add docs
* docs
* revert lib changes...
* clean up
* clean up
* remove make file
* Fixes missing key
* clean up
* add my lets split
* add more emoji
* add the telophase board (unofficially, I guess...)
* add missing files
* add/reset files
* Review feedback implementation: Not needed. Add #define FLIP_HALF to your config.h file instead.
* Review feedback implementation: All of these includes should be replaced with #include QMK_KEYBOARD_H.
* Review feedback implementation: [FAILING] You may want to use LAYOUT_ortho_4x12 instead, and move this to /layouts/community/ortho_4x12/ instead. That way, you can use the same keymap for all of the boards.
* clean up
* add a key for command tilde (osx loves it)
* at least its building again
* remove adjusts and migrate layer switching to MO(_LAYER)
* update the telophase readme
* update the telophase readme
* grahampheaths -> grahampheath
* ONEHAND_ENABLE -> SWAP_HANDS_ENABLE
* convert lets split to use ortho_4x12
* Move lets split keyboard layout into community/ortho_4x12
* make telophase use LAYOUT()
* I did it?!
* Add clap and grin
* swap tabs and back and forward
* whitespace
* initial commit
* update readme
* enable/disable some keyboard features and add 60_ansi community layout support
* put my name everywhere
* can't use numbers for defines
* enable lighting
* put in a default keymap, use the correct pins, and put in a switch matrix
* update switch matrix to use KXY hex notation
* add QMK Configurator support
* add the rest of my name
* update where to get this keyboard
* Implement magic 8-ball mode for big series switch
* LED Testing
* Add Ctrl+Alt+Del key mapping
* Add Windows lock (win+L) layout.
* Add Big Series 3-key
* Add Big Series 4-key
* Add Big Series 2-key
* Fix layout mapping for Big Series 3u
* Fix merge-conflict.
* Refactor bigseries boards into a single folder
* Add biacco-biacco keymap
* Change P position
* Update biacco-biacco map y position
* Revert y position...
* Refactor needless lines
* Fix some review commentted
* Obelus Refactor: LAYOUT to LAYOUT_ortho_4x4
- Keymap also now uses #include QMK_KEYBOARD_H
- Readability and white space changes
- rules.mk now has LAYOUTS = ortho_4x4
- added info.json
* naKey Refactor: LAYOUT to LAYOUT_numpad_5x4
- Matrix LAYOUT renamed to LAYOUT_numpad_5x4
- Now supports community layout numpad_5x4
- White space changes
* naKey Configurator update
Updated order of JSON objects to match new matrix order.
* initial commit and get pins correct
* get the switch matrix done
* Add Configurator support
* update LED numbering
* enable lighting options
* add a default-ish keymap
* turn off mouse keys as the file gets too large
* put my name everywhere
* update Alf names
* update keymap to match whats on qmkeyboard.cn
* Matrix refactor: eagle_viper/v2 LAYOUT_all
- Deleted K0L (research indicates no switch position at this location)
- Renamed K0J to K0I (spacebar key; on 9th column instead of 10th)
- Updated info.json and default keymap to match
- readability updates
* Keymap refactor
readability update
* Revamp replicaJunction keymaps
Updates both the replicaJunction Ergodox and Atreus keymaps and moves
most of the logic into a new user directory.
* Cleanup as requested in #3589
* Slightly increased TAPPING_TERM
* Fixed typo in #pragma once
* Fix TAPPING_TERM redefined in config.h
* Add include of replicaJunction.h
Due to the tap dance references, without this include, I was getting
compiler errors about both internal QMK items like
`qk_tap_dance_state_t` and constants defined in my replicaJunction.h
file like TD_LAYER_TOGGLE.
Also remove some commented-out code that defined an enum which has since
moved to replicaJunction.h.
* Addition of I2C master driver for STM32, Generalization of ISSI3731 driver
- Addition of an i2c_master driver for STM32 to replicate expectations of AVR driver.
- Moved ISSI3731 driver one level up to make it accesible by both architectures.
- Renamed ISSI3731 functions to a more general name for preparation of other ISSI drivers.
- Added compiler directives where necessary to differenciate each architecture.
* converted tabs to spaces
* 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
* Created base sixshooter configuration
* Added SixShooter basic LED on/off support.
* Updated LED identifier numbers to align with layout identifiers (and IDs on PCB).
* Minor sixshooter documentation cleanup.
* Added sixshooter info.json file.
* Moved sixshooter custom keycodes out of keymaps and into base keyboard files, small documentation tweaks.
* Removed unnecessary boot section size definition.
* Removing CONFIG_H if/define and replacing with #pragma once.
* 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
* add change_reciver2sender()/change_sender2reciver()
This is a change to improve readability.
* txled, rxled off in matrix_init()
* add serial_send_packet() / serial_recive_packet()
This is a change to reduce object size.
* add serial_low() at ISR() top
* add __attribute__((always_inline)) to some functions
* modify serial_send_packet()/serial_recive_packet()
A little, object size reduction.
A little, speedup.
* add debug code to helix/serial.c
* Adjust sampling timing of serial signal being received
* add split_scomm.c/split_scomm.h and change serial.c/serial.h
serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.
* add split_scomm.c/split_scomm.h into helix/rev1
* reduce object size helix/rev2/matrix.c
* remove checksum check, add parity check
* force occur parity error for test
* parity test ok. remove test code
* change some comment & add skip code when buffer_size == 0
* serial.c: multiple types of transaction support
Add 4 bits transaction-type field at packet top.
Select Transaction Descriptor Table entry by transaction-type.
* helix serial master-slave transaction optimize
Using multi-type transaction feature of serial.c, communication contents between master slaves were optimized.
* add debug code for retry
* add comment into each config.h
* fix ISR status drop
* add a debug macro 'debug_retry_chg()'
* reduce led_test size
* remove debug code from helix/serial.c and etc.
* helix:five_rows change TAPPING_TERM value 140
* Improved compatibility with let's split of serial.c. Finish helix/serial.c improvement.
- The difference with the original let's split's serial.c
- It's high-speed about 4 times.
- Stable bi-directional data transfer. (Helix need master to slave transfer)
- serial.h was divided 2 files, serial_config.h and sereial.h
- With multiple types of transaction support, communication contents can be optimized. (NEW flexible API)
- USE OLD Simple APIs (compatible with let's split serial.c)
- files :
- serial_config.h -- hardware configuration (need include by config.h)
- serial.c/serial.h -- serial communication
- USE NEW flexible APIs. (Support multi-type transaction function.)
serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.
- files
- split_scomm.c -- communication buffer is defined in here. call by matrix.c.
- split_scomm.h -- buffer size is defined in here. include by matrix.c, split_util.c
- serial_config.h -- hardware configuration (need include by config.h)
To use the NEW API, specify #define SERIAL_USE_MULTI_TRANSACTION
- serial.c/serial.h -- serial communication lower layer
- NEW APIs for serial.c / serial.h (The lower layer)
// Soft Serial Transaction Descriptor
typedef struct _SSTD_t {
uint8_t *status;
uint8_t initiator2target_buffer_size;
uint8_t *initiator2target_buffer;
uint8_t target2initiator_buffer_size;
uint8_t *target2initiator_buffer;
} SSTD_t;
// initiator is transaction start side
void soft_serial_initiator_init(SSTD_t *sstd_table);
// target is interrupt accept side
void soft_serial_target_init(SSTD_t *sstd_table);
int soft_serial_transaction(int sstd_index);
int soft_serial_get_and_clean_target_status(int sstd_index);
- NEW APIs for split_scomm.c / split_scomm.h (The upper layer)
move from old serial.c the following buffer and functions
serial_slave_buffer[]
serial_master_buffer[]
void serial_master_init(void)
void serial_slave_init(void)
int serial_update_buffers(void)
define SERIAL_xxxxx_BUFFER_LENGTH move from serial_config.h to split_scomm.h

<!-- http://www.keyboard-layout-editor.com/#/gists/c1e8a15c68e4c52eed84653f21ae2d29 -->
Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.
Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.
Base Layer
----------
As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
- `Esc` when pressed alone
- `Ctrl` when pressed with another key
Control+ Layer
--------------
Left `Ctrl` key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:
- `Ctl+` + `hjkl` are vim-style motion keys
- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
- `Ctl+` + `Backspace` is forward delete
Fn Layer
--------
Audio Controls:
- `Fn` + `a` Volume Down
- `Fn` + `s` Volume Up
- `Fn` + `d` Mute
To flash this layout you need to press `Fn+Backspace`

Designed specifically to make switching back-n-forth with the Apple's
MacBook Pro keyboard intuitive. Has a slight tendency toward
readline/vim keybindings.
Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed
with another key.
Base Layer
----------
As simalar to the Apple keyboard as possible. Notiable exception is
`Caps Lock`:
- `Esc` when pressed alone
- `Ctrl` when pressed with another key
Control+ Layer
--------------
Left Ctrl key switches to the "Control+ Layer". This layer mostly acts
like a control key in most cases, with a few exceptions:
- `Ctl+` + `hjkl` are vim-style motion keys
- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
- `Ctl+` + `Backspace` is forward delete
Fn Layer
--------
Audio Controls:
- `Fn` + `a` Volume Down
- `Fn` + `s` Volume Up
- `Fn` + `d` Mute
To flash this layout you need to press `Fn+Backspace`
* Adds Fleuron keyboard directory and default layout
* Adds Fleuron keyboard directory and default layout
* adds double zero macro, and updates to the new macro methodology
* adds raise and lower layers
* removes makefile from default layout, turns off mousekey, console, and command in rules.mk
* makes upper right key a bksp in default layout, adds .json layout file
* updates to default layout
* tweak default layout jusabit
* fix raise and lower switch case, and scoot a few keycodes around
* make changes for PR #3571
* fixing erros for PR #3571
* adds Dollartacos first custom keymap
* fixes for PR #3571
* Initial Commit of catch22 macropad by rockydbull
* Add configurator info.json
* Use macros
* Use pragma once
* Use CA22 as product id
* Clean up readme
* Use the layer define value
* Feedback from @drashna
* initial commit
* get the matrix correct
* make my name be known
* add rgblight enable
* add a default keymap
* Add QMK Configurator support for the base layout
* add name here too
* fix up readme
* remove set user from keymap
* use led_set_kb as per drashna's comments on PR
* cloned colinta as base
* switched to default base. started customising
* minor changes to layout
* added mouse keys
* minor tweaks to layout and mouse speed
* updated readme
* tweaked layout
- added middle fn keys
- moved rgb controls to fn layer middle
- added special keys to fn layer right
* moved scroll buttons as to not interfere with lshift
* turned on backlight
* fixed backlight
* changed user keycodes to differentiate
* changed folder name to lowercase
* updated readme
* stop processing after custom keycode
* edits to suit new standards
* added layer indicator using gp100 and gp103
* Rules for vitamins_included
Added a section to disable RGB underglow for the Let's Split
Vitamins Included board.
* fixing ortho_4x12 configs
* Using upstream/master version instead
* Additions and Corrections
Corrected the Kinesis/Stapelberg's .c file to allow LEDs to work
Removed excess cruft from my Kinesis keymap to reflect this change
Other minor tweaks and adjustments to my ortho_4x12 and 5x12 layouts
* Updated readme
* dz60/macos_arrow: move the eject key on esc to leave right cmd+bksp for move to trash
* dz60/macos_arrow: move the reset key on the media layer
This avoids accidental activation.
* dz60/macos_arrow: disable LEDs
* Fix some minor errors in tap dance example
Fix for #3529
Fix minor errors in the code examples for __Example 4: 'Quad Function Tap-Dance'__ and relevant documentation.
Clarified the need to include the header file in `keymap.c`.
* Use #pragma once in header guard
Fix for #3529
Implement change requested in #3530
* Make Bootmagic and Command docs a little easier to read
* Sometimes Bootmagic/Command is default on
* "Escape" pipe character so it renders correctly
* jennetters fourier keymap, tapdance declarations and reformatted keymap file for readbility
* Update rules and keymap to follow new makefile setup.
* Add #pragma once to config.h
* add SCREEN_NAV layer for copy/pasting within screen
* working readreg/paste macros
* working read reg / paste macros
* write log and tran patterns, and expand
* add ls -la shortcut, add tab on combined layer
* put delete word on the right pinky key on shell_nav layer
* add TAB on the right side, add reset key
* added Cloud9 macros
* add cloud9 shortcuts to atreus layout
* added BROWSER_CONTROL layer
* finalized browser control layer
* adding comment
* add browser control layer to atreus
* add flashing command line
* remove the tab on combined layer
* remove the tomouse
* remove mouse layer, change log/tran expand patterns, cleanups
* add dumptlog macro
* add "delete to home" shortcut
* fix conflict
* remove unneeded mouse layer
* add meh shortcuts on the browser_control layer
* add/modify some macros
* explain the various layers
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
* Update keymap.c
forgot an include
* Update keymap.c
* Update readme.md
Updated picture of layout, link was wrong and pointed to an old/removed image.
* Update readme.md
Fixed error in link to keyboard layout editor
* Update keymap.c
More cleanup of the includes at beginning of file
* Update config.h
* Update keymap.c
Fixed typo: Volume Down and Volume Up on the Tab layer were switched.
* Update keymap.c
* Added a macro on the Tab layer for <kbd>Ctrl</kbd>+<kbd>Alt</kbd>+<kbd>Del</kbd>
* Added a macro on the Gaming layer for <kbd>Alt</kbd>+<kbd>Tab</kbd> (replaces prebious Backspace key)
* Update readme.md
Updated readme.md file to reflect changes to keymap.c in cover photo and KLE link.
(added short cuts for Ctr Alt Del and Alt Tab)
* fix for that stupid LED
* formatting changes and add firmware flashing warning to readmes
* update readme with more info
* add LAYOUT_60_ansi thanks to help from phlop
* add configurator support for 60_ansi
* add 60_ansi for community layout support
* 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
* Fix the SLC_CLOCK setting for the Split Common code
Make the SCL_CLOCK setting configurable per board, since some use different settings
And change the Iris to use 100000L instead of 400000L
* Add SCL_CLOCK variable to documentation
* Change SCL_CLOCK default to 100000L
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
* Update keymap.c
forgot an include
* Update keymap.c
* Update readme.md
Updated picture of layout, link was wrong and pointed to an old/removed image.
* Update readme.md
Fixed error in link to keyboard layout editor
* Update keymap.c
More cleanup of the includes at beginning of file
* Update config.h
* Update keymap.c
Fixed typo: Volume Down and Volume Up on the Tab layer were switched.
* Added initial files for QC60 prototype
* renamed all 'keymap' to 'layout'
* renamed layout macros to suggested naming convention of LAYOUT_macro_description
* replaced boilerplate
* removed rules.mk from keymap folders
* replaced 'qc60/rev1' with 'qc60/proto'
* replaced more boilerplate
* renamed DEFAULT_FOLDER to point at the correct folder
* updated readme
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
* Update keymap.c
forgot an include
* Update keymap.c
* Update readme.md
Updated picture of layout, link was wrong and pointed to an old/removed image.
* Update readme.md
Fixed error in link to keyboard layout editor
* Update keymap.c
More cleanup of the includes at beginning of file
* Update config.h
* fabian layout
* added MOUSECURSOR layer that gets activated by holding space
* cleanup, meh and tilde and grave as separate keys, toggle switch for mousecursor layer
* merged default
* #pragma once
* including QMK_KEYBOARD_H instead of various imports
* using layer toggle instead of a function
* deleted obsolete rules.mk (was part of the old makefile system)
* #pragma once
* including QMK_KEYBOARD_H instead of various imports
* use ifndef KEYBOARD_planck_rev6 instead of ifdef KEYBOARD_planck_rev5
* Temporary work around for CB60 sound issues
Discussed this with @fredizzimo, upping the system ticks to 100K fixes
the sound issues I was having with the CB60; speaker would fail to shut
off after playing music, sometimes at startup. This changes the matrix
scan time from it's default of every 2ms to once ever 200us.
Fred has a more extensive change to the way matrices are scanned which
will require less clock cycles and we can then revert this change at
that time.
* Remove keymap dir from clueboard root
* Arrow: matrix and keymap refactor
* Left: matrix and keymap refactor
* Numpad: matrix macro correction
* Numpad: add support for community layouts numpad_5x4 and ortho_5x4
* Right: matrix and keymap refactor
* DC01 global readme cleanup (minor grammar)
* DC01 global Configurator support
* Right: bugfixes for HHKB-style keymaps
* Replace KC_NO with ___ in matrices for readability
* Add K49 to LAYOUT matrix
K49 was previously was stated to be padless, but it's actually the right-hand half of a split Backspace.
* Switched positions of K3C and K3D in LAYOUT matrix
When using a split right Shift, K3D is to the left of K3C.
* Insert KC_NO (___) element into bottom row of LAYOUT_60_ansi matrix
Reported by @NimMooMoo on QMK Discord
Right-hand modifiers on bottom row were shifted one key to the right. After debugging, discovered that the "electrical matrix" (the part of the matrix macro that determines which row and column a key uses) was one element short on the last row at K49, causing the rest of the row to be offset by one column.
This commit corrects that issue.
* Added a missing comma in the LAYOUT matrix
* Moved F row to raise
* Moved mouse keys over one space and removed unneccessary code
* Moved delete on lower
* Added CTRL functions
* Added Print Screen
* Added README.md file
* Updated CTRL
* Updated readme to current CTRL
* Minor Changes
* Updated mouse speeds
* Unknown changes
* Updated README and keymaps
* Removed caps from number row and put it in special
* Moved around equals sign again
* Updated mouse key speed
* Pull Request Updates
* Put in my keymaps
* Fixed all but weird lets split issue
* Organized and tried to trobleshoot lets split
* Organized and tried to trobleshoot lets split
* Added bbaserdem keymaps
* Added bbaserdem keymaps
* Fixed stuff
* FIxed a filename error
* Lets split eh
* Finalized things regarding keymap
* LFKPad: matrix refactor
* LFKPad: keymap refactor (QMK_KEYBOARD_H; matrix update)
* LFKPad: Configurator support
* LFKPad: added community layout numpad_6x4 to rules.mk
* LFKPad: Update rgb_sequence to match new matrix
* LFKPad: delete deprecated makefile include block from rules.mk
* DC01 initial commit
- Addition of directories
- Left readme
* Initial commit of left half
* Initial files for right half
* arrow
* i2c adjustments
* I2C slave and DC01 refractoring
- Cleaned up state machine of I2C slave driver
- Modified DC01 left to use already pressent I2C master driver
- Modified DC01 matrixes
* Fixed tabs to spaces
* Addition of Numpad
* Add keymaps
- Orthopad keymap for numpad module
- Numpad keymap for numpad module
- ISO, ANSI and HHKB version of keymap for right module
* Minor matrix.c fixes
* Update Readmes
* Add support for LFK65-HS - a hotswap 65%
* Add info.json for LFK65-HS
* Clean up for new build system, remove uneeded code.
* LFK65-HS cleanup. Fixed LAYOUT macros, etc
* Line ending stuff again
* Added Let's Split Eh? Files and updated #USE_IC2 checks to also include th EH revision (can only be used in I2C)
* Added personal keymap, updated some of the EH files
* Created new keyboard file for testing "lets_split_eh" will merge into lets_split once fully functional
* Added split code from lets_split, removed pro micro imports and LED code
THIS IS WORKING CODE, WITHOUT RGB AND BACKLIGHT
* Took back original Lets Slit files for the lets_split keyboard, working in the lets_split_eh folder for now
* Updated eh.c
* More rework of the I2C code, added global flags for split boards.
* Introduced RGB over I2C, having weird edge case issues at the moment though
* Fixed weird I2C edgecase with RGB, although still would like to track down route cause..
* Changed RGB keycodes (static ones) to activate on key-up instead of key-down to elimate weird ghosting issue over I2C
* Lots of changes, mainly externalized the Split keyboard code and added logic for only including when needed.
- Added makefile option "SPLIT_KEYBOARD" that when = yes will include the split keyboard files and custom matrix
- Split keyboard files placed into quantum/split_common/
- Added define option for config files "SPLIT_HAND_PIN" FOr using high/low pin to determine handedness, low = right hand, high = left hand
- Cleaned up split logic for RGB and Backlight so it is only exectuted / included when needed
* Updated documentation for the new makefile options and #defines specific to split keyboards
* Added a bit more info to docs, so people aren't confused
* Modifed Let's Split to use externalized code, also added left and right hand eeprom files to the split_common folder
* Removed some debugging from eh.c
* Small changes to keyboard configs. Also added a default keymap (just a copy of my that_canadian keymap).
* Added a README file to the Let's Split Eh?
* Changed it so RGB static updates are done on key-up ONLY for split boards rather than all boards. Also fixed leftover un-used variable in rgblight.c
* Updated default keymap and my keymap for Let's Split Eh? Updated the comments so it reflects RGB control, and removed audio functions.
* Fixed lets_split_eh not having a default version
* Removed "eh" references from lets_split folder for now
* Took lets_split folder from master to fix travis build errors, weird my local was overriding.
* Changed LAYOUT_ortho_4x12_kc -> LAYOUT_kc_ortho_4x12 to match bakingpy and others
* Removed rules.mk from my lets_split keymap, not needed
* Updated the config_options doc to better explain the usage of "#define SPLIT_HAND_PIN"
* Fixed split_common assuming I2C for RGB and Backlight. Added serial backlight support (stole from bakingpy's Levinson code ;) ) Serial RGB not implemented yet. Also Added "USE_IC2" to the lets_split_eh/eh as that was looked over.
* Fixed stupid mistake, forgot to set BACKLIT_DIRTY to false after setting slave backlit settings for serial
* Updated backlight data block to be cleaner (thanks drashna ;) )
* Add files via upload
Added a nordic layout for UT47
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* Add files via upload
* Update to readme and keymap files
* Update readme.md
Changed cover image
* Update readme.md
typo fix
* Delete config.h
* Delete keymap.c
* Delete readme.md
* Delete rules.mk
* Updated cover image in readme.md
Fixed typo in image of keymaps
* Update keymap.c
Changed backslash to forward slash in first function layer.
* Add files via upload
* Delete config.h
deleting files so I can upload to a folder with lower case name
* Delete keymap.c
deleting file so I can change to lower case name
* Delete readme.md
deleting file so I can change to lower case name
* Add files via upload
* Update keymap.c
Cleaned up definitions in beginning of file.
Previously, when looking for rules.mk files, we'd parse the individual
folders (A/B/C/D/E) into 5 variables, (A/B/C/D/E, A/B/C/D, A/B/C, A/B,
and A). Then, we'd get the final directory names and store _those_ in 5
new variables (A, B, C, D, and E). Then, when looking for the rules.mk,
we'd look in root_dir/keyboards/(A|B|C|D|E)/rules.mk, instead of looking
in root_dir/keyboards(A|A/B|A/B/C|A/B/C/D|A/B/C/D/E)/rules.mk. This
commit changes that logic from the former to the latter.
* Line ending stuff again
* Added Let's Split Eh? Files and updated #USE_IC2 checks to also include th EH revision (can only be used in I2C)
* Added personal keymap, updated some of the EH files
* Created new keyboard file for testing "lets_split_eh" will merge into lets_split once fully functional
* Added split code from lets_split, removed pro micro imports and LED code
THIS IS WORKING CODE, WITHOUT RGB AND BACKLIGHT
* Took back original Lets Slit files for the lets_split keyboard, working in the lets_split_eh folder for now
* Updated eh.c
* More rework of the I2C code, added global flags for split boards.
* Introduced RGB over I2C, having weird edge case issues at the moment though
* Fixed weird I2C edgecase with RGB, although still would like to track down route cause..
* Changed RGB keycodes (static ones) to activate on key-up instead of key-down to elimate weird ghosting issue over I2C
* Lots of changes, mainly externalized the Split keyboard code and added logic for only including when needed.
- Added makefile option "SPLIT_KEYBOARD" that when = yes will include the split keyboard files and custom matrix
- Split keyboard files placed into quantum/split_common/
- Added define option for config files "SPLIT_HAND_PIN" FOr using high/low pin to determine handedness, low = right hand, high = left hand
- Cleaned up split logic for RGB and Backlight so it is only exectuted / included when needed
* Updated documentation for the new makefile options and #defines specific to split keyboards
* Added a bit more info to docs, so people aren't confused
* Modifed Let's Split to use externalized code, also added left and right hand eeprom files to the split_common folder
* Removed some debugging from eh.c
* Small changes to keyboard configs. Also added a default keymap (just a copy of my that_canadian keymap).
* Added a README file to the Let's Split Eh?
* Changed it so RGB static updates are done on key-up ONLY for split boards rather than all boards. Also fixed leftover un-used variable in rgblight.c
* Updated default keymap and my keymap for Let's Split Eh? Updated the comments so it reflects RGB control, and removed audio functions.
* Fixed lets_split_eh not having a default version
* Removed "eh" references from lets_split folder for now
* Took lets_split folder from master to fix travis build errors, weird my local was overriding.
* Changed LAYOUT_ortho_4x12_kc -> LAYOUT_kc_ortho_4x12 to match bakingpy and others
* Removed rules.mk from my lets_split keymap, not needed
* Updated the config_options doc to better explain the usage of "#define SPLIT_HAND_PIN"
* Use string with delay
* Add skipped region to ergodox
* Add send string config
* Use default_layer_state instead of function
* Fully generalize keyboards
* old iris cleanup
* Fix Drashna keymap compile issues
By checking to see if secret.c exists before actually trying to add it
* Remove unnecessary references
* Add 4x12 ortho board
* Update userspace readme for secrets
* Make RGB more modular
* Fix iris keymap, since we don't need the lower left (Function keys)
* Fix includes
* Add Blanks
* Fix Ergodox lower layer
* Add suspend commands
* Add Maltron Layout
* Add additional layouts
* Finish adding gamepad to Iris
* Tweaks to iris gamepag layer
* make gaming layers more friendly
* minor gaming layer tweak
* Add Carplax
* Add modded key timer function
* Cleanup and macro documentation
* Add QMK DFU info
* Add 'old' keymap for 12 LED spare
* Update Pro Micro documentation
* Disable twinkling so it fits in firmware space
* Switch to QMK DFU bootloader, since it's better anyhow
* Write default layer state colors to EEPROM
Since we are writing to EEPROM anyways, and this way, it sticks on reboot
* Fix QMK DFU bootloader options
* More updates for QMK DFU support
* Use matrix scanning hack for startup_user until #3113 gets merged
* Fix indicator light consistency issue
* Add/readd ifdefs to indicators
* Add/readd alt indicator
* Remove RGB Twinkling from Viterbi macro pad
* Fix default layer color detection
* Fix rebase and detection issues
* Cleanup code so it will compile if RGBLIGHT is disabled
* Revert vsode settings
* Use Pragma Once instead of boilerplate code
* initial files for rev 6 with encoder
* music map init, dip scan added
* adds ws2812 driver for arm
* flesh out dip and encoder support
* adds default encoder res
* adds default encoder res
* start muse implementation
* muse working with encoder as control
* flip direction
* try mouse wheel again
* dont break other revs
* dont break other revs
* conditional autio
* pwm ws driver (not working)
* update build includes for chibios
* update ws2812 driver/config
* last commit for glasser code
* working example
* remove rgb for now
* finish up rev6
* working encoder keycodes
* add warnings to planck keymaps about the LAYOUT
* - 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
* Turn backlight support on by default
* Correct error on LED backlight support
Turns out, it doesn't work if you don't enable it in rules.mk. Who knew?
* Adds Audio Keycodes to both the feature page and master list
* Re-orders the keycode list, so it's alphabetical (mostly)
* Add additional (missing) sections to the keycode list
* Add and update links in the keycode page
* Add and reorder links in sidebar's keycode section
* integrated Peter Fleury's LCD library for HD44780 LCDs
* fixed typo
* cleanup finished
* add documentation
* added HD44780 documentation
* removed keyboard from .gitmodules
* resolved merge conflict
* removed edit of kira75s rules.mk made by merge
* moved hd44780 to drivers/avr
* Added licence info to hd44780 files
* Added link to hd44780 docs.
@drashna mentioned it'd be good to have a mention of the userspace in
the QMK structure section. Rather than rewrite the docs on userspace, I
chose to link to the existing documentation.
* mitosis:datagrok: improved tenkey layout; changelog + more in README
* mitosis:datagrok enable audio!
* mitosis:datagrok: underscore on right shift, rearrange some symbols
* mitosis:datagrok: add more descriptions to readme
* mitosis:datagrok: abuse space cadet to get equivalent of RSFT_T(KC_UNDS)
Friend was having trouble with their tada since their build environment wasn’t setup. Updated so they could access the links that were listed (old links 404’d)
* default keymap refactor: QMK_KEYBOARD_H include; readability
* Configurator support
* info.json was missing a comma
* Added matrix functions to matrix.c per @drashna
* Moved info.json to rev1 directory
* rev1 info.json metadata update
* Configurator support for ErgoDash rev2
* Moved rev1/ergodash.h to ergodash.h
* Integrate rev2 support into ergodash.h; delete rev2/ergodash.h
* Initial commit of guidoism
* created movement layer
* movement layer works!
* removed unnecessary layers
* moved enter key up and recreated caps lock
* cleaned up
* num pad
* checkpoint
* checkpoint
* checkpoint
* Added num pad
* changed max power draw so i can use this on ipad
* move around quotes
* added tri layer for a homed numpad
* moved layout to new style
* Update readme.md
* Update readme.md
* Update readme.md
* Update readme.md
* added keys to unicode conversion
* removed adjust layer since its not used anymore
* add hhkb bluetooth functionality (rn42)
pretty much straight from tmk
some minor changes to make things work
* hhkb jp personal keymap
* Revert "hhkb jp personal keymap"
This reverts commit 886713d8bb.
* Initial commit for Comet46 firmware
* Update Comet46 README
* Add readme to satt keymap of comet46
* Add default keymap for Comet46
* Fix broken link in readme
* Delete redundant includes
* Modify default keymap & fix LAYOUT macro
* Modify satt keymap of Comet46
* Add H87a keymap and info
* Create readme.md
* Add h87a .json for kbfirmware.com use
* Update readme.md
* Update readme.md
* Update h87a files
* Delete Makefile
* Update readme.md
* Delete desktop.ini
* update files to match new QMK framework
* Update files to match new QMK structure
* Update files to match new QMK structure
* add layout name information
* Add info.json
* update keymap to support layout_all
* update keymap to support layout_all
* update rules.mk to fix filesize
* Update readme.md
* Update config.h
* Update readme.md
* Update config.h
* Update config.h
Add "define CONFIG_H and include "config_common.h" back to file
* Added basic MxSS support
* Fixed split RSHFT for ISO layouts
* Updated readme.md for MxSS
* Added initial support for individual control of front RGB LEDs
* Changed RGBLED color selection to work using hue and saturation rather than RGB
Added code for LED state change on layer change
* Avoid needing an entire 8 bits to store the brightness value
* Added custom keycodes, along with their handlers
* Added EEPROM storage for front LED config
* Fixed up ability to use QMK Configurator and updated readme.md
* Applied suggested changes from pull request: https://github.com/standard/standard/issues/452
Updated name in license descriptions
Updated layouts to snake case
Corrected mistakes in info.json
Updated layer_colors to a weak attributed array in mxss.c
* Defined a new safe range for custom keycodes in keymap.c
* Fixed up issues with front LED
Fixed LEDs not always updating in indicator mode
Added support for the other RGBLIGHT modes in RGB mode
* Attempted fix for ISO layouts for QMK configurator
* Added basic MxSS support
* Fixed split RSHFT for ISO layouts
* Updated readme.md for MxSS
* Added initial support for individual control of front RGB LEDs
* Changed RGBLED color selection to work using hue and saturation rather than RGB
Added code for LED state change on layer change
* Avoid needing an entire 8 bits to store the brightness value
* Added custom keycodes, along with their handlers
* Added EEPROM storage for front LED config
* Fixed up ability to use QMK Configurator and updated readme.md
* Applied suggested changes from pull request: https://github.com/standard/standard/issues/452
Updated name in license descriptions
Updated layouts to snake case
Corrected mistakes in info.json
Updated layer_colors to a weak attributed array in mxss.c
* Defined a new safe range for custom keycodes in keymap.c
If you run `brew install avr-gcc`, you get a version that has
compatibility issues with LUFA. I updated the getting started guide for
osx, the qmk_install setup script, and added a section to the FAQ for
folks like me who accidentally updated avr-gcc past 7.
* preliminary Gray COD67 checkin
* Get part of the switch matrix prepped
* finish switch matrix
* mock the pins and keymap for now
* add keymap fixes
* update readme with flashing instructions
* keymap fix
* Add more flashing and notes info to readme
* remove un needed file
* fix comments
* add QMK Configurator Support
* Configurator support
* Add LAYOUTS = planck_mit to rules.mk
* Disable Tap Dance at the keyboard level
* Keymap refactor: QMK_KEYBOARD_H; enable Tap Dance for default keymap
* Add keymaps/default/rules.mk to enable Tap Dance
* Reverse the addition of config.h in keyboards/tetris/keymaps/default/
* Initial port of AL1 Keyboard from Triangle Labs
* Change REPLACE WITH YOUR NAME and some readme changes
* More readme change to indicate Group Buy Link
* Give Triangle Lab credit
* remove pins from config.h and rely on matrix.c
* Add QMK Configurator support
* new matrix for LE(Last Edition) E6V2
* Update pin outs for the new version of the PCB
* putting in some placeholders for now
* Trying to get e6v2/oe:default to compile
* put rules.mk in the right directory
* Add and update readme files
* move info.json to oe directory
* Update LE directory
* rename keyboard name
* Add QMK Configurator Support
At this time, ths only covers the ALL case and allows people to use
the configurator to generate their keymaps. More work will need
to be done.
* Refactor KEYMAP to LAYOUT standards
- Change KEYMAP to LAYOUT_ortho
- Added a new LAYOUT called LAYOUT_numpad
* Use the new LAYOUT_numpad macro
* Add QMK Configurator support
* Change LAYOUT names as per code review
* Change positioning of keys in the matrix
* fix compile issue
* initial support for kc60se extracted from Blake Lewis
* add my name to the list
* remove breathing as the backlight pin is not a PWM one
* use standard LAYOUT macros such as 60_ansi and 60_ansi_split_bs_rshift
* Make the base LAYOUT more sensible and add Configurator support
* add atmel-dfu bootloader
* Adding Rama M10-A Macropad
* ch-ch-ch changes...
* Major overhaul based on SMT's keymap.
* more changes.
* Moved the FKeys to the ADJUST layer.
* More rearranging.
* Alias in Atreus62 keymap to make it more legible
Added config.h to fix tapping_term issue for Caps Lock key in OSX
* Added OrthoDox layout.
* More layout changes.
* Fixing things with the keyboard.
* Finishing touches.
Set left-hand master in config.h
Embedded the arrow keys in keymap.c
* Revised keymap making this easier to use.
* additions and changes.
* changes to various keymaps.
* Minor adjustments to OrthoDox layout.
* Added Eco keymap. Updated Let's Split keymap.
* Added gherkin
* Removed my M10A keymap
* Planck Keymap Updates
Updated my Planck keymap and created a simple keymap for Seph's Preonic.
* Added readme
* readme fixes
* Update readme.md
more clarification
* Keymap Tweaks
Removed the Power button setting from the keymap. It was in a
horrible location. I'll work on getting it setup somewhere else
sometime later.
* Added Readme
I finally got around to adding a readme to this keymap. I've also added minor changes to the layout.
* Fixed Keymap Error
* Fixed Readme
* adding iris and levinson keymaps
* Tweaks to keymap
* added youngJZ keymap
* Changes to keymap
Added a readme.md
* Levinson changes
Added the readme.md and rules.mk files.
Configured RGB underglow and backlighting.
* fixed readme
* changes to keymaps
* Updated keymap
* Updated readme.md
* Updated Readme (again)
* Updated Readme
Fixed formatting. Again.
* Updated readme
This is the last readme update for this keyboard update. I hope.
* Added Contra keymap
* Kinesis Keymap Update
* Updated Keymaps
I've updated my Kinesis (Stapelberg) layout and my Clueboard 66 layout.
I've also updated my Kinesis Readme.
* Clueboard Keymap update
Added media keys to my Clueboard 66 Rev2 layout.
* Added keymap
Added Minidox keymap & rules.
Added user function to Let's Split keymap that turns off the red
LEDs on the Pro Micros.
* New Zen keymap
Added Zen keyboard to my list of keyboards, so had to generate a new
keymap for it.
Also adding some changes to my MiniDox keymap and config.h, as well
as my Levinson's config.h.
The config.h file changes enable ee_hands.
* A few changes for useability
I made a few changes to the Minidox keymap to see if I can't make it more useable.
I'm also working on streamlining the Zen keyboard keymap to reduce layers.
* Re-vamped Iris keymap.
* changes
* minor keymap change
This was a minor keymap change to use mod_tap for the backspace key:
ALT when held, BSPC when tapped.
* Added Fourier keymap
* Keymap Cleanup
Moved KC_ESC to KC_CAPS, and changed KC_ESC to KC_GRV
This is because of muscle memory, I kept hitting ESC when trying to hit TAB.
* Keymap Adjustments
Swapped Caps/Esc, put Caps in Raise/Lower layers, put Grv in normal
Esc position. Adjusted the readme.md to reflect these changes.
* minor tweaks
Added code to disable red ProMicro LEDs after flashing.
* Clean-up
* Corrections to keymap.
Fixed a foul-up in the Zen keymap where the lctrl was where the LOWER
should have been.
* Changes to make this fall in line with the new Layout features
* Moving to LAYOUTs for 4x12 boards
* fixed config.h file
* standardization changes
* Reverted Atreus62 keymap to LAYOUT format
* Switch Preonic and Nyquist to ortho_5x12
* Corrections to config.h
* config.h file tweaks
* config.h file tweaks
* Added missing integers.
* Updated Seph's keymap to LAYOUT standard.
* Keymap tweaks & changes
* Bringing keymap up to LAYOUT standard
* Trying to get LEDs working
* Fixes for Stapelberg
Updated my keymap to confirm to the new LAYOUT standard.
Updated the stapelberg.h to reflect this LAYOUT standard.
Updated the stapelberg.c files to hopefully get the LEDs working.
* Getting closer to Kinesis LED functionality.
* NKRO Fix
Disabled NKRO for VUSB ortho_5x12 boards
* Hardware update
Backlight enable
Change pin
Add 2keys (68→70)
* change readme
* support rev1
change keymap path
* move ergodash.h
* sync the left and right backlight led
matrix.c is same as iris keyboad
backlight breathing is unstable, so it comment out
* disabled commands
* dual spacefn, -= match to amj40 layout
-= was killing my muscle memory, so I moved it. Don't have any other
plans for kl though, so leaving them there as well.
* now helix led_test local rgblight.[ch] not use. remove.
* greatly simplify keyboards/helix/rev2/keymaps/led_test/keymap.c
Helix keymap 'led_test' use modified default/keymap.c
* Add Dynamic Macro Toggle using Tap Dance
One Tap -> Play Macro 1
Two Taps -> Stop Recording
Three Taps -> Start Recording Macro 1
* Move feature from default to dyn_macro_tap_dance
* Convert 4 space tabs to 2 space tabs
Follows qmk style guidelines
* Addition of hard brigtness limit for RGB_Matrix
- Added a define "RGB_MATRIX_MAXIMUM_BRIGHTNESS" to enable hard limiting the maximum brightness for rgb_matrix
- Used the above define to limit the maximum brigthness of HS60 for better stability
* Added docs for new rgb_matrix define
* Addition of check for maximum brightness
* Add mbsurfer keymap for DeltaSplit75 with ANSI split backspace
* Update mbsurfer DeltaSplit75 keymap to include right hand arrow cluster
* Update mbsurfer DS75 keymap, move volume down to be symmetrical
* Add readme to Mbsurfer DS75 keymap
* Fix Mbsurfer DS75 keymap image
* Clean up mbsurfer DeltaSplit75 keymap, add layer overview comments
* Fix volume down and add mute to fn layer
* Restructure kbd75 to support multiple revs
* add rev2 files
* fix config comments
* try and avoid duplicate code for LAYOUT macros
* keep the same layouts for rev2 for info.json
* Add QMK Configurator support for the numpad layout
* update readme to talk about rev2
* Clean up SEND_STRING keycodes and add media keys
* Remove stray define
* Add missing SEND_STRING keycodes for completeness
Also, add KC_EJCT to the keycode references
* Create keymap.c
Modified the default to be way more like a pok3r, already clear that it needs a better ctrl location.
* Delete keymap.c
* Create keymap.c
Modified the default keymap to be more like a pok3r, clearly needs a better ctrl location and probably some other tweaks.
* Add files via upload
* Update keymap.c
Parenthesis correction.
* Parenthetical cleanup
Forgot one...
* Mods and numpad; cleanup
Rework mods and numpad layer, remove superfluous declarations
* comment define devlayer
* Create readme.md
Background and intention.
* Updated to fit example
* Update readme.md
* Update rules.mk
* Update config.h
* Updated includes
Replaced:
#include "iris.h"
#include "action_layer.h"
#include "eeconfig.h"
With:
#include QMK_KEYBOARD_H
* Update rules.mk
Removed RGB enable declarations
* Update rules.mk
* Update keymap.c
Spaced out on MINS and EQL.
* Update rules.mk
Removed unnecessary block.
* Remove the RGB call
Make would fail because of the RGB call that wasn't anywhere but here, cleaned that up from the default config.
* Update keymap.c
Added [ and ] since I'd forgotten them originally...
* slight tweaks to xd75 keymap
* update to config.h to remove undef of solenoid active
* code organization for userspace
* updates to userspace and keymaps
* add rgb to userspace and lets split
* add conditional around rgb functions in userpsace
* move rgb layer changes into layer_state_set_user
* Add Plover layer to DCompact from Planck default
* Fix up and update DCompact READMEs
* Add missing Steno features
* Switch flags to re-enable extrakeys
* Fix compilation bug in Chimera layout
* Update config.h
Matrix pinout updated to current revision.
* Add updated matrix, define RGB pin
Matrix updated to current pinout, pin for WS2812 defined.
* Update config.h
Matrix rearrangement due to change in Teensy2.0++ position
* Update readme.md
Added maintainer info, updated controller info
* Add mbsurfer keymap for DeltaSplit75 with ANSI split backspace
* Update mbsurfer DeltaSplit75 keymap to include right hand arrow cluster
* Update mbsurfer DS75 keymap, move volume down to be symmetrical
* Add readme to Mbsurfer DS75 keymap
* Fix Mbsurfer DS75 keymap image
* Adjust TAPPING_TERM to make accessing the nav layer easier
* JJ40: Add RESET key to lower layer.
* Disable all lock LEDs on "oscillope" keymap.
I'm not 100% sure why yet, but attempting to turn on a lock LED on my v1
JJ40 PCB causes the PCB to become unresponsive. The easy fix is to just
disable all of the lock LEDs, since I don't have any LEDs on my keyboard
anyway.
Many thanks to u/wanleg on Reddit for suggesting this fix: https://www.reddit.com/r/olkb/comments/8en8f1/strange_caps_lock_behavior/e06kcaf/
* DactylManuform: Updating dvorak keymap
* Changed NAV and NUM layers to LOWER and RAISE
* Removed Mod+Key form RAISE and LOWER keys to be used as layer togglers exclusively
* Added missing keys to LOWER layers
* DactylManuform: fixed bugs in keyboard config file
* DactylManuform: Change default mouse config
The default mouse config parameters are slow and not very user friendly, this commit overrides the default
values.
wq
Signed-off-by: Sameeh Jubran <sameeh.j@gmail.com>
* Dactylmanuform: Update default keymap (qwerty) to match dvorak's
Recently devorak's layout went through some changes for changing layer toggles behavior,
adding missing keys, and fix minor bugs, this commit introduces these changes to the default keymap.
Signed-off-by: Sameeh Jubran <sameeh.j@gmail.com>
* Dactylmanuform: Add permissive hold support
Signed-off-by: Sameeh Jubran <sameeh.j@gmail.com>
* DactylManuform: Updating documentation
* Adding a picture of the keyboard
* Adding keymaps pictures
* Adding missing EEPROM files for EE_HANDS
flashing these before firmware will let the
user use either hand as master without reflashing
Signed-off-by: 20lives <lior@dotcore.co.il>
* Added files for my new layout.
* Added layout template
* Qwerty layout done
* Qwerty layout done
* Test commit
* Qwerty, colemak e dvorak layouts done.
* Added templates for extra layers
* Added templates for extra layers
* Small adjustments on function layer
* Minor updates
* Minor updates
* daily update
* added my dz60 layout
* added my niu mini layout
* made the suggested corrections
* Clone default chimera-o layout
* Make changes for base layer
* Enable mouse suppport flag
* Implement majority of DAD layout
* Add mouse movement keys
* Fine tune mouse control and fix tap toggle
* Fix mouse button locations
* Set adpater LED colors for layers
* Increase responsiveness of key taps
* Update layout for thumb comfort
* Rename layout and add README
* Add comments to keymap
* Implement DCompact layout for Planck
* Copy over DCompact README to planck
* Fix up odds and ends for Planck
* Readme cleanup
* Refactor KEYMAP to LAYOUT
* Configurator support
* Readme cleanup
Didn't spot that the modified lines were formatted as a list the first time.
* 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
* updated normacos layout and fixed some readme typos
* removed leftover merge diff
* added waits to macros that make use of SEND_STRING
* fixed wrong waits on macros that use SEND_STRING
* normalized macro comments after adding waits
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* fixed bootloader makefile
- Echo -e does not behave coorectly on mac
- Replaced with equivilant printf statements
* quick typo fix
* started work on halfkeyboard
* update to keymap
* halfkey layouts complete for dvorak and qwerty
* added plover layout to halfkeyboard mapping
* fixed error in dvorak layout right hand
* fixed error in dvorak layout right hand, comments updated
* thing
* added minus and equals to normal layouts
* added minus and equals to normal layouts
* adde visualizer matching halfkeyboard mappings
* adde visualizer matching halfkeyboard mappings
* updated keymaps for mirror handedness functionality for all layers. Also added visualizer code for distinct color for each layer, and LCD text displaying the current layer.
* had a KC_TILD where should have had KC_GRAV
* its spelled KC_GRAVE
* mouskeys and some visualizer work.
* added LED backlight visuals
* trying to get visualizer working
* Move lufa descriptor to protocol/usb_descriptor
* Try to compile usb_descriptor on ChibiOS
* Add lufa_utils for ChibiOS
Lufa USB descriptors for ChibiOS
* More lufa_util compatibility fixes
* First compiling version of shared USB descriptor
* Send the usb descriptors
* Fix the CONSOLE output on ChibiOS
* Add errors for unsupported interfaces
* Enable support for vitual serial port USB descriptors
* Implement virtual serial port for ChibiOS
* Cleanup the lufa_utils
Use the default lufa header files
* Add raw hid support for ChibiOS
This is completely untested
* Enable midi compilation on ChibiOS
* Move midi functionality out of lufa.c
* Don't register sysex callback when not needed
* ChibiOS compilation fixes
* Update ChibiOS submodule
* Fix the Midi USB descriptor
It didn't work properly when both Midi and Virtual serial port was enabled.
* Add MIDI support for ChibiOS
* Fix USB descriptor strings on ChibiOS
* Use serial usb driver for raw hid
* Generalize the ChibiOS stream like drivers
This makes the initialization much more simple and eliminates a lot of
the code duplication.
* Convert console output to chibios stream driver
* Fixes for ChibiOS update
* Update the ChibiOS contrib submodule
To include the usb data toggle synchronization fixes
* Fix duplicate reset enumeration on ChibiOS
* Add missing include
* Add number of endpoints check for ChibiOS
* Enable serial USB driver on all keyboards
* Add missing includes when API is enabled withot midi
* Add another missing inlcude
* consolidated my custom animations into visualizer.c in my keymap directory
* LED backlight keys animation KITT scanner
* moved my custom rules.mk to my keymap folder
* undoing changes i shouldn't have done
* more fixes
* updated comments on the visulizer code
* steno keys added to plover layout
* updated halfkeyboard rules to allow steno mode
* adding my stuff back after hard reset
* added a plover layout back in for androud steno app
* fixed layer toggle typo
* merged again
* visualizer decided to have a conflict again. fixed.
* keymap change to add mouse keys and put layer switching on shortcuts layer
* made the ergodox LEDs scan left to right and back again
* visualizer work
* KITTSCANNER finally
* fixed right hand shortcuts layer and removed handedness switching for base layer so jump in gaming works corrrectly
* added another sweep that goes full on over both boards then full off in both directions
* added function key layer and cleaned up some layer switching
* Add SX60
* Add config maps and layouts as well as readmes.
* cleanup and fixes
* correct readme
* add missing closing commenty tag
* Changing includes to QMK_KEYBOARD_H
* Update settings.json
Remove config change that was added automatically by vscode.
* Update readme.md
fix readme formatting
* add some comment about Helix customize and auto-setup RGBLIGHT_LIMIT_VAL
* add define USB_MAX_POWER_CONSUMPTION
* Helix keyboard OLED, RGBLIGHT enable/disable control integrate into rules.mk
rules.mk: add 4 Variables for compile control.
# Helix keyboard customize
# you can edit follows 4 Variables
# jp: 以下の4つの変数を必要に応じて編集します。
OLED_ENABLE = no # OLED_ENABLE
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
config.h: auto set RGBLED_NUM by HELIX_ROWS and rules.mk's define
* HELIX_ROWS define move from config.h to rules.mk
* add readme.md
* rename readme.md to readme_jp.md
* add readme.md and modify readme_jp.md
* change helix/ssd1306.c for select glcdfont.c position
* add variable LOCAL_GLCDFONT into each keymaps rules.mk
* Add iPhone/iPad LED support to Helix default keymap
* add Freggy keymap
* adjust the delay of serial.c
* change readme
* renumber _ADJUST for shrink program size
* Add suspend functions
* Disable RGB code if it's disabled
* Add suspend code to ChibiOS for future compatibility
* Add keyboard_init functions
* Change where references so it will compile
* Wrong command chained in wake up kb function
* Fix non-feature file changes
* Add documentation
* Re-add matrix init docs
* add rgblight code to example
* Remove keyboard init stuff for separate PR
* Update readme.md
updated links, hope those are the correct ones
* planck premek - left thumb shift
* middleclick key
* mod tap thumb-shift, space
* update layout description
* Port my keymap to QMK
* Add Percent Canoe keyboard
* Fix row of nonus backslash
* Update info.json to be correct for canoe
* fix alignment
* Use qmk shortcuts rather than tmk functions
* Move over first macro
* Move rest of macros over
* clean up unused functions
* Move files to userspace for HHKB
* Add keymaps for hhkb
* Change LAYOUT_ISO to LAYOUT_iso
* Remove bootloader key in info.json
* Remove tilde remap from Karabiner
* Add country_iso_alpha2_code to macros
* Add my keymap for canoe
* Add layer colour indicator
* Fix bad rebase
* Fix naming of keymap from rebase
* Add GRV to function layer
* Fix keymap to use new LAYOUT_JP
* Update keymaps to use process_record_*
rather than action functions
* Update hhkb imports to be just what is needed
* Update whitefox to use LAYOUT macro instead of KEYMAP
* Remove redundant imports from user definition
* Move TAPPING_TERM to config.h
* Use layer change events to change RGB LED colour
* temp
* Fix layer switching to iPad on HHKB
* Fix Canoe pictures
* modifying fortitude for working
* add accurate keymap
* backlight fix
* Fix slave LED Backlight
* Add readme.md
* modified readme.md
* Fixed make error
* Commit including suggestions
* Add dvorak and colemak layout and some fix
* Optimize secrets code
* Orthodox tweaks
* rules.mk features
* Minor cleanup
* Revert mod bits
* Force Hold breaks One Shot Tap Toggle
* Cleanup
* Moke keymaps more consistent
* minor ergodox tweak
* More OSM for the Orthodox
* Cleanup of userspace
* Toggle Secrets
* Add hidden process record for super secret macros
* Make sure secret macros always compiles
* finish up making them super secret
* Add ColinTA's rgb twinkle as WIP
* Optimize RGB Twinkling for typing
Also, tweak RGB indicators.
AND WTF, I HAVE NO IDEA WHY THE INDICATORS ONLY WORK AS IS. The logical method for getting them working doesn't ... and it's beyond bizarre
* Make console logging more configurable
* Indicator travisty
* Clean up userspace rgb code
* Optimize RGB Twinking to work on default layer only, and to base it's color on the curent hue
* Eff it... rgblight_sethsv_at runs at every matrix scan
* RGB Twinkle cleanup
* Update Iris code for new board
* Move RGB Indicator and RGB Twinkle into userspace
* Move RGB Indicator code to rgb_stuff.c
* Major cleanup of RGB Code in userspace
* Additional cleanup of RGB code in userspace
* Use noeeprom functions to save my boards!
* Enable RGB Sleep on all boards now
* Add old iris board
* tapping tweak
* Use byte 19 for eeprom to prepare for possible merge of eeconfig function pr
* Add code to fix default layer after eeprom reset
* Put in my keymaps
* Fixed all but weird lets split issue
* Organized and tried to trobleshoot lets split
* Organized and tried to trobleshoot lets split
* Added bbaserdem keymaps
* Added bbaserdem keymaps
* Fixed stuff
* FIxed a filename error
* add not-so-minidox handwire keyboard
* corrected keymap
* multiple adjustments to not_so_minidox keyboard
* remove I2C master left define
* update default layer set function
* move solenoid code into userspace
* minor adjustments to config.h
* update keymaps to utilize userspace
* move features and config to userspace, correct build issue
* correct solenoid pin
* adjust defaults for solenoid pin and enable
* default solenoid to on for not_so_minidox
* disable RGBLIGHT_SLEEP for xd75
* tweaking solenoid enable/disable in userspace and keymaps
* preonic-keymap: kuatsure keymap
* preonic-kuatsure: move arrows and braces and stuffs
* preonic-kuatsure: give more time for leader
* preonic-kuatsure: move _ to lower o
* preonic-kuatsure: tap dance space to enter
* preonic-kuatsure: move vol buttons around
conflicted with kaleidoscope file navigation
* preonic-kuatsure: lower+spc = esc
* preonic-kuatsure: add lock key & remove led stuff
* preonic-kuatsure: little bit of tmux leadering
* preonic-kuatsure: remove colemak and dvorak
* preonic-kuatsure: remove lock key and tap dance
* preonic-kuatsure: lower space -> enter -- raise space -> esc
* preonice-kuatsure: move tmux stuff to homerow keys
* preonic-kuatsure: set tmux prefix to a function
* preonic-kuatsure: hello game layers
* preonic-kuatsure: instead of zelda, ffvii for game mode :)
* preonic-kuatsure: mild changes after playing games to game modes
* preonice-kuatsure: omg comma dangles and spaces in switch!
* preonic-kuatsure: kinda make lower a shift on special characters
* preonic-kuatsure: I don't use these
* preonic-kuatsure: move vol- to the begining of media row
* preonic-kuatsure: more tmux leader stuff ( pane 3 & last pane )
* preonic-kuatsure: abstract out tmux pane zooming
* preonic-kuatsure: abstract pane switch
* preonic-kuatsure: game_mod is carries over lower positions
starting to wonder if I need game_mod ... lol
* preonic-kuatsure: switch lwr/rse esc / ent
* preonic-kuatsure: add leaders for window switching
* preonic-kuatsure: major pruning of adjust layer
* preonic-kuatsure: major rework on raise layer
* preonic-kuatsure: game mods f layer is raise now
* user-kuatsure: hello
* various-kuatsure: use layout format + globalize querty / number keys
* preonic-kuatsure: don't use tap dance anymore
* various-kuatsure: code formatting
* various-kuatsure: add function layer vars
* preonic-kuatsure: moar formatting
* preonic-kuatsure: add home / end keys
Added rules.mk for the infinity
* Moved tap dance enums to gordon.h
* Moved tap dance aliases to gordon.h
Moved TD to user space
* Added config file with preventing mods sticking
* Added a few keys to keymap
* Feat: Create personal ergodox keymap
* FEAT: Update bpruitt-goddard keymap with custom layout
* Fix: Remove unused pieces from bpruitt-goddard keyboard
* Feat: Add QWERTY layer to bpruitt-goddard ergodox keymap
* Refactor: Remove unused layers from bpruitt-goddard keymap
* Fix: Update base layer for bpruitt-goddard keymap
* Fix: Remove un-reachable key combo from FN layer
* Fix: Rename FN layer to numpad layer
* Feat: Create one-shot modifier layer for mac os use
* Doc: Update readme to reflect my keymap
* Feat: Add mac desktop space switching
* feat: Update keymap layers to use ergodox pretty format
* And and fix _noeeprom functions to many of the RGB Underglow functions
* Many functions are unnecessarily calling the eeprom write code. The toggle/enable is command is especially guilty of this, as it writes to EEPROM 3 times. But rgb mode writes twice, every time it's called. And init resets the rgb eeprom range and then writes back to it twice!
* Fixed the rgblight_sethsv_noeeprom to work as expected, by moving a lot of the code to a helper function.
* Added a noeeprom function for mode, enable, disable, and toggle functions. (didn't bother for increase/decrease stuff, and didn't add new keycodes)
* Add to predefined colors list
* Add new functions to manual/docs
* Update RGB Sleep feature to use _noeeprom
Because that's exactly what it should be doing, actually!
* Add Percent Canoe keyboard
* Fix row of nonus backslash
* Update info.json to be correct for canoe
* Change LAYOUT_ISO to LAYOUT_iso
* Remove bootloader key in info.json
* Update default Nyquist revision
* LED slave fix
* Sync changes from lets_split
* Add needed check for debouncing
* Remove line that was setting PD2 pin and interfering with use of that pin
* Add backlight key to keymap
* Refactor for AMJ Pad
* Configurator update for AMJ Pad
* Add hardware agnostic layouts numpad_6x4 and ortho_6x4
* Add agnostic layouts to rules.mk
* Refactor AMJ Pad to use new hardware agnostic layouts
* Refresh & improve leader documentation page
- register_code/unregister_code are not the recommanded way to do macro.
- Provide some details I wish I had found when first used the leader
functionality.
* Add old way to use macro.
* Initial commit of guidoism
* created movement layer
* movement layer works!
* removed unnecessary layers
* moved enter key up and recreated caps lock
* Added num pad
* Fix dead link to USB keycodes doc
Link was dead and the fresher version I could find on usb.org is still older than this one.
Thus, WaybackMachine seems the best option.
* Fix dead link to USB keycodes doc, with 2 options
Give the WaybackMachine link (fresher and for reference of the content of the original link) and the usb.org one (older)
* Fix serial split for BFO9000
* Fix serial split for DeltaSplit75
* Fix serial split for Helix
* Fix serial split for MiniDox
* Fix serial split for Viterbi
* Revert "Fix serial split for Helix" since it's super complex
This reverts commit 72538df105.
We'll let the helix owner fix this issue, or dive into the code later
Wait for 1 second before turning on RGB to get debug messages on
console.
- configure HSV color, on a brand new pro micro the default values are
0, 0, 0
* Refactor for Alps64
* Reverts deletion of LAYOUT_kc macro; renames LAYOUT_standard_60 to LAYOUT_60_ansi
* Add LAYOUTS = 60_ansi to rules.mk
* Rename LAYOUT_standard_60 to LAYOUT_60_ansi in info.json
* Adds basic support for u/flehrad's bigswitch pcb
- also adds support for OSX Eject/Power
The function of this key depends on the version of OSX and if you
have physical media. For a macbook pro 2017 holding this key down
brings up the shutdown dialog. If you wrap it in LCTL and LSFT the
screenlock turns on immediately.
* Switch to Layout Macro
- add a code for OSX Sleep
* Add a README
* Turn on RGB by default
* Add info.json
* Address comments by @drashna
* Only define Eject in keymap
* Account for backlight enabled flag when passing backlight level to slave
* Add BL_TOGG to keymap for testing
* Apply backlight fix to Iris
* Port I2C LED backlight control from Iris to Levinson
* A personal layout for the orthodox keyboard
* Added layout readme.md
* Consolidated inclues with #include QMK_KEYBOARD_H
* Moved layer tones setup to config.h
* Replace persistent_default_layer_set calls with set_single_persistent_default_layer
* Simplified the process_record_user function using layer_state_set_user function and MO() to set the lower, raise, nav and media layers
* Removed AUDIO_ENABLE ifdefs and persistent_default_layer_set() as they are not needed any more
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* HS60 ANSI update
* HS60 ANSI update
* preliminary check in of Kira75
* Layout done
* make an appropriate keymap and fix layout commas
* formatting changes and housekeeping
* add info.json contents for QMK Configurator support
* add RGB underglow support
* add support for caps and num lock leds
* community layout support for eagle_viper v2 and remove mechmerlin keymap dir
* community layout support for eagle_viper v2 and remove mechmerlin keymap dir
* Change to QMK_KEYBOARD_H and remove merlin keymap in favor of cmmunity layouts
* community layout support 60_ansi
* community layout support for 60_ansi
* Adding Rama M10-A Macropad
* ch-ch-ch changes...
* Major overhaul based on SMT's keymap.
* more changes.
* Moved the FKeys to the ADJUST layer.
* More rearranging.
* Alias in Atreus62 keymap to make it more legible
Added config.h to fix tapping_term issue for Caps Lock key in OSX
* Added OrthoDox layout.
* More layout changes.
* Fixing things with the keyboard.
* Finishing touches.
Set left-hand master in config.h
Embedded the arrow keys in keymap.c
* Revised keymap making this easier to use.
* additions and changes.
* changes to various keymaps.
* Minor adjustments to OrthoDox layout.
* Added Eco keymap. Updated Let's Split keymap.
* Added gherkin
* Removed my M10A keymap
* Planck Keymap Updates
Updated my Planck keymap and created a simple keymap for Seph's Preonic.
* Added readme
* readme fixes
* Update readme.md
more clarification
* Keymap Tweaks
Removed the Power button setting from the keymap. It was in a
horrible location. I'll work on getting it setup somewhere else
sometime later.
* Added Readme
I finally got around to adding a readme to this keymap. I've also added minor changes to the layout.
* Fixed Keymap Error
* Fixed Readme
* adding iris and levinson keymaps
* Tweaks to keymap
* added youngJZ keymap
* Changes to keymap
Added a readme.md
* Levinson changes
Added the readme.md and rules.mk files.
Configured RGB underglow and backlighting.
* fixed readme
* changes to keymaps
* Updated keymap
* Updated readme.md
* Updated Readme (again)
* Updated Readme
Fixed formatting. Again.
* Updated readme
This is the last readme update for this keyboard update. I hope.
* Added Contra keymap
* Kinesis Keymap Update
* Updated Keymaps
I've updated my Kinesis (Stapelberg) layout and my Clueboard 66 layout.
I've also updated my Kinesis Readme.
* Clueboard Keymap update
Added media keys to my Clueboard 66 Rev2 layout.
* Added keymap
Added Minidox keymap & rules.
Added user function to Let's Split keymap that turns off the red
LEDs on the Pro Micros.
* New Zen keymap
Added Zen keyboard to my list of keyboards, so had to generate a new
keymap for it.
Also adding some changes to my MiniDox keymap and config.h, as well
as my Levinson's config.h.
The config.h file changes enable ee_hands.
* A few changes for useability
I made a few changes to the Minidox keymap to see if I can't make it more useable.
I'm also working on streamlining the Zen keyboard keymap to reduce layers.
* Re-vamped Iris keymap.
* changes
* minor keymap change
This was a minor keymap change to use mod_tap for the backspace key:
ALT when held, BSPC when tapped.
* Added Fourier keymap
* Keymap Cleanup
Moved KC_ESC to KC_CAPS, and changed KC_ESC to KC_GRV
This is because of muscle memory, I kept hitting ESC when trying to hit TAB.
* Keymap Adjustments
Swapped Caps/Esc, put Caps in Raise/Lower layers, put Grv in normal
Esc position. Adjusted the readme.md to reflect these changes.
* minor tweaks
Added code to disable red ProMicro LEDs after flashing.
* Clean-up
* Corrections to keymap.
Fixed a foul-up in the Zen keymap where the lctrl was where the LOWER
should have been.
* Changes to make this fall in line with the new Layout features
* Moving to LAYOUTs for 4x12 boards
* fixed config.h file
* standardization changes
* Reverted Atreus62 keymap to LAYOUT format
* Switch Preonic and Nyquist to ortho_5x12
* Corrections to config.h
* config.h file tweaks
* config.h file tweaks
* More Iris Tweaks
* Mess with iris arrow keys
* Massive layout overhaul to make everything more OLKB
* Additional tweaks
* Cleanup Userspace
Remove unused layer code, and properly set userspace eeprom structure.
* EEPROM stuff
* Only use indicators if layer indication is enabled
* Iris and Orthodox Tweaks (Status Indicators)
* Additional tweaks to finish tri layer conversion
* Disable ProMicro ligths globally
* Add Pro Micro hacking info
* Successfully get mod indication working on thumb clusters
* Enable printing when console is enabled
* Make Modifier Indicator lights more modular
* Keymap cleanup
* Tapping test changes
* Cleanup and minor tweaks
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* HS60 initial rgb port
porting HS60 to master rgb code
* HS60 fixes
* Hs60 rgb changes
* Cleanup for HS60 ISO
* More HS60 cleanup
* Update config.h
* More Cleanup for HS60
* HS60 modifications to work with configurator
* More HS60 cleanup
* Remove userspace layouts on HS60
* Update rules.mk
* HS60 bootloader change
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* General fixes for RGB_matrix
- Complited speed support for all effects
- Fixed raindrop effects to initialized after toggle
- Fixed raindrop effects to use all available LEDs
- Fixed effect step reverse function
- Moved RGB_MATRIX_SOLID_REACTIVE under correct flag
* Documentation update for RGBmatrix
* More doc updates
* I2C library can now retry if it has failed
- Replaced the original TWIlib by LFKeyboard's modified version
- Allows for an extra argument on TWITransmitData, if blocking is set to 1 function will retry to transmit on failure. Good for noisy boards.
* RGB Matrix, use alternative I2C library
TWIlib seems to be hanging for me sometimes probably due to ISR routine. I have used i2c_master as a good alternative.
Note: this commit is for Wilba6582 to verify before merge
* Update rgb_matrix.c
* RGB matrix cleanup
- Remove TWIlib
* Add support for Swap Hands feature to Orthodox and Iris
* Fix hag's iris keymap to use LAYOUT properly
* Fix Swedish's Iris Keymap
* Fix Drashna's Orthodox keymaps, because he's an idiot
Many a times one would want to use multiple modifiers with the same key,
preferably without having to hold anything, like `Ctrl+Shift+C` or
`Ctrl+Shift+V` to copy/paste in GNOME Terminal. To make this possible, we need
to be able to chain one-shot modifiers, so that we can have multiple of them
active at the same time.
The easiest way to accomplish this is that whenever we activate a one-shot
modifier, we apply it on top of the existing set, instead of re-setting the
state. When deactivating, either due to an interrupt, or due to a timeout, we
deactivate all oneshots anyway, so the clearing part is covered. When we turn
the one-shot modifier into a toggle, that will also clear all one-shot modifiers
first, so we covered that case too.
Fixes#2796, #1580, and #856.
Signed-off-by: Gergely Nagy <qmk@gergo.csillger.hu>
* FORK!
* WIP - just how i like it
* empty
* more movement
* mouse keys
* more vimminess
* append/insert shift
* WIP - vim macros
* blocked out layer below in cmd mode.
also, about to restart my cmd approach.
* WIP - new vim layer
ripoff of the ergodox one, but rewritten as a state machine.
* debugged some, got key repeat working
* moooar coverage
* moooar coverage
* regular vis mode
* basically done with basics.
* some refactoring
- common movement sequences into helper function
- added some rgb controls
* modkey passthru feature
* stdized on cmd-left/right instead of ctrl-a/e
sadly. as there's no reliable shift-ctrl-e
* indicator lights
* moved vim layer into userspace
* cleaned up some yanking edge cases
* docs and some tweaks to layerescapes
* updated/added license strings
* updated comments
* moved config changes to keymap
* spurious changes removed
* cleanup pass, HT drashna for suggestions
- used _keymap() pattern to better modularize event processing in userspace
- made some static things static
- removed unused function
- improved reset.
* dz60 started. keymaps done.
* bugfixes: missing state change in d-, lspace should toggle vim mode.
* Caps lock indicator -> vim indicator.
And adjusted mousekey settings.
* don't actually need the second move trigger and it makes typing less responsive.
* some oppurtunistic bugfixing from my other keyboard (sorry)
* added readme for my dz60 keymap.
* bugfixing and comments updated (niu_mini)
* cleanup as suggested from review
* FORK!
* WIP - just how i like it
* empty
* more movement
* mouse keys
* more vimminess
* append/insert shift
* WIP - vim macros
* blocked out layer below in cmd mode.
also, about to restart my cmd approach.
* WIP - new vim layer
ripoff of the ergodox one, but rewritten as a state machine.
* debugged some, got key repeat working
* moooar coverage
* moooar coverage
* regular vis mode
* basically done with basics.
* some refactoring
- common movement sequences into helper function
- added some rgb controls
* modkey passthru feature
* stdized on cmd-left/right instead of ctrl-a/e
sadly. as there's no reliable shift-ctrl-e
* indicator lights
* moved vim layer into userspace
* cleaned up some yanking edge cases
* docs and some tweaks to layerescapes
* updated/added license strings
* updated comments
* moved config changes to keymap
* spurious changes removed
* cleanup pass, HT drashna for suggestions
- used _keymap() pattern to better modularize event processing in userspace
- made some static things static
- removed unused function
- improved reset.
* Add tap-dancing semicolon.
* Infinity60 was running out of USB space.
* Rename common layout variable so it doesn't collide with some keyboards.
* Godspeed!!!
* Patch the number of LEDs for 1up60rgb
* Don't light up if rgblight is off.
* Add HHKB layout.
* Add HHKB to Talljoe's layout.
* Bring back bananasplit keymap.
* info.json
* Userspace config.h doesn't seem to be setting PREVENT_STUCK_MODIFIERS
* Remove 1uprgb workaround
* Add TKL to talljoe keymap.
Also introduces the tkl layout.
* FORK!
* WIP - just how i like it
* empty
* more movement
* mouse keys
* more vimminess
* append/insert shift
* WIP - vim macros
* blocked out layer below in cmd mode.
also, about to restart my cmd approach.
* WIP - new vim layer
ripoff of the ergodox one, but rewritten as a state machine.
* debugged some, got key repeat working
* moooar coverage
* moooar coverage
* regular vis mode
* basically done with basics.
* some refactoring
- common movement sequences into helper function
- added some rgb controls
* modkey passthru feature
* stdized on cmd-left/right instead of ctrl-a/e
sadly. as there's no reliable shift-ctrl-e
* indicator lights
* moved vim layer into userspace
* cleaned up some yanking edge cases
* docs and some tweaks to layerescapes
* updated/added license strings
* updated comments
* moved config changes to keymap
* spurious changes removed
* preliminary checkin for facew keyboard
* Update readme file
* put the standard 60 ansi layout in
* update rules to have LAYOUT_60_ansi to use my userspace layouts
* Add
* Revert "Add"
This reverts commit 4b10fef887.
* Add Ergo42 keymaps
for JIS layout
* Fix hdbx keymap for Ergo42
Changed some keys layout and add description.
* Updated hdbx keymaps for Ergo42
Now using update_tri_layer_state.
Underglow color sync layer-switching.
* Fixed hdbx keymap
Deleted rgb define line (now using master) and fixed some issues pointed out.
* update ignore
* fixed
* Added support for JJ50 from KPRepublic, no rgb or backlight control yet. Added as a layout of ymd96 at the moment (same microprocessor). Basic keymap with three layers to get started.
* Added support for JJ50
* Tidied up jj50 code, backlight and RGB is now working.
* Renaming "KEYMAP" to "LAYOUT" to adhere to the new QMK standards.
* move obelus and nakey to ckeys directory
* delete the originals
* short readme about ckeys
* edit readmes to reflect new changes
* add build guide info..and here's me trying to retrigger the build job
* Stopping point at creating targets for new_project script
* Add second argument for target
* Add the ps2avrgb target
* consider the case where the firmware type target is not valid
* fix template files to be more generic
* Code cleanup
* Change variable name to be more descriptive
* make avr the default
* forgot to put the template files in
* Take out useless comments
* add usage info
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* General fixes for RGB_matrix
- Complited speed support for all effects
- Fixed raindrop effects to initialized after toggle
- Fixed raindrop effects to use all available LEDs
- Fixed effect step reverse function
- Moved RGB_MATRIX_SOLID_REACTIVE under correct flag
* Documentation update for RGBmatrix
* More doc updates
* Use memmove instead of memcpy
gcc 8.1 gives the following error:
lib/lufa/LUFA/Drivers/USB/Class/Common/HIDParser.c:93:5: error: 'memcpy' accessing 42 bytes at offsets 28 and 0 overlaps 14 bytes at offset 28 [-Werror=restrict]
This patch resolve this by using memmove instead
Signed-off-by: Sameeh <Sameeh Jubran>
* Remove ATTR_CONST from a void returning function
gcc 8.10 gives the following error when attempting to compile
lib/lufa/LUFA/Drivers/USB/Core/Events.h:334:5: error: 'const' attribute on function returning 'void' [-Werror=attributes]
Signed-off-by: Sameeh <Sameeh Jubran>
* Added support for the upcomming Lets_split vitamins included
* Updated readme
* Corrected header of readme
* Enabled RGB
* Broke everything
* broke some more shit
* Revert "broke some more shit"
This reverts commit 6ad68e6269.
* Revert "Broke everything"
This reverts commit feeee4e40d.
* Fixed USB detection, and RGB on slave
* started modifying readme, to use msys2
* Added support for the upcomming Lets_split vitamins included
* Updated readme
* Corrected header of readme
* Enabled RGB
* Broke everything
* broke some more shit
* Revert "broke some more shit"
This reverts commit 6ad68e6269.
* Revert "Broke everything"
This reverts commit feeee4e40d.
* Fixed USB detection, and RGB on slave
* started modifying readme, to use msys2
* Updated readme to reflect use of msys2 Added avrdude to msys path
* added avrdude option to msys installer
* Removed extra installation of avrdude
* Renamed to vitamins_included and implemented drashnas changes
* Fixed include guard
* Fixed some includes, and added avrdude target to docs.
* Fixed default keyboard
* add new layout and fix formatting
* Add 60_ansi layout so I can use my user space defined layouts
* Make QMK_KEYBOARD_H and LAYOUT renames
* update info.json file
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* Add effect speed support for RGB Matrix *No eeprom yet*
Keycodes RGB_SPI and RGB_SPD have been added to increase and decrease effect speed.
Speed is not saved in EEPROM yet as per Jack's request.
* Update rgb_matrix.c
* RGB Matrix speed fix rgblight.h
* More fixes for rgb speed. Speed functions declared but not used in rgblight
* More travis fixes..
* Another one for travis..
* Move the microswitches to the top of the keyboard like how it is
physically
Format change to make things pretty
* Fix keymap to match the new layouts
* stopping point at new info.json file
* Update readme
* Finish up QMK Configurator fixes for info.json
* initial commit
* add row/column and pin info
* Add first part of switch matrix
* documentation and additional config items
* map out the non confusing part of the matrix
* map out the top row
* ok I think I got it
* fix some stupid compile errors
* put in a default keymap
* rename LAYOUT to LAYOUT_all
* add a standard layout and info.json file
* Fix up readme for default keymap
* Add toggle key LED functionality
* changes based on review feedback
* added additional configurator support
Added support for choosing between 5 configurator options:
Layout (supports all keys)
Layout_ansi_1u
Layout_iso_1u
Layout_ansi
Layout_iso
* confirming to conventions
replaced .h filenames with QMK_KEYBOARD_H
* Add
* Revert "Add"
This reverts commit 4b10fef887.
* Add Ergo42 keymaps
for JIS layout
* Fix hdbx keymap for Ergo42
Changed some keys layout and add description.
* added tanuki
* updated definitions to new qmk standard
* complying with suggestions made by drashna
* update rulesfile
* used qmk template for readme file
* Made an appropriate KLE and converted it.
For use with the CA66 on qmk.fm
* Changed KEYMAP to LAYOUT to match new info.json
* Changed #include and LAYOUT for new info.json
* added own keymap for planck
* dynamic macros
* moved the reset button
* Update readme for volume explanation
* Format
* added safe double shift
* changed the modified shift to regular shift, for allowing shift + F keys
* moved power stuff to the function layer
* del button on raise
* Update Readme.md
* updated F keys
* Add pletcher keymap to dilly/keymaps
For the moment, this keymap just removes unneeded RGB keycodes, since
an iPad will cut the keyboard off if LEDs are turned on.
* Drop support for A_RSFT, add media and autoshift
* Lower USB_MAX_POWER_CONSUMPTION for dilly on iPad
* Document USB_MAX_POWER_CONSUMPTION
This config option is useful for limiting the requested power by, e.g.,
an iOS device. While the default value is 500, a much lower value--say,
50--can sufficiently power a small keyboard without LEDs.
* Add personal keymap for Pearl 40%
* Updating readme and adding keymap image
* Updated readme
* Force make to use Python 3
* cleanup keymap
* updated keymap image
* update readme for new keymap image
* reverting atmega32a_program
* removed redundant sections of user config and rules
* fixed user config file
* fixed led indicators to properly show layer 4
* Fix Unicode sample
* Add irony mark
* Remove unpretty keymaps
* Add QMK DFU and Conditional Music Mode
* Unicode fixes
* Unicode fixes
* Make layer indication more modular
* Finish removing Faux Click
* Cleanup of UserSpace and addition of 'update_tri_layer_state' function
* Add modifier status indicators to Orthodox
* Remove tri layer function
* Minor tweaks
* Remove the Orthodox's Indicator's reliance on layer_state_set
* Add custom EEPROM settings
* Make EEPROM config more efficient
* Viterbi Config
* Add Iris Keyboard layout and Userspace cleanup
* Iris keyboard tweaks
* Use Grave Escape on Iris
* Update Readmes
* edited keymap and fitted for tada68
* edited rules to make mouse work
* filled config.h to make mouse cursor move smooth
* added descriptive readme
* added layout with split backspace and steamlined naming
* added layout with split shift, split backspace and split #
* changed keymap to fit the new layout
* removed duplicate layout KEYMAP_FAKB and pointed keymap.c to default on
* further cleanup from layout duplicate
* add some comment about Helix customize and auto-setup RGBLIGHT_LIMIT_VAL
* add define USB_MAX_POWER_CONSUMPTION
* Helix keyboard OLED, RGBLIGHT enable/disable control integrate into rules.mk
rules.mk: add 4 Variables for compile control.
# Helix keyboard customize
# you can edit follows 4 Variables
# jp: 以下の4つの変数を必要に応じて編集します。
OLED_ENABLE = no # OLED_ENABLE
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
config.h: auto set RGBLED_NUM by HELIX_ROWS and rules.mk's define
* HELIX_ROWS define move from config.h to rules.mk
* add readme.md
* rename readme.md to readme_jp.md
* add readme.md and modify readme_jp.md
* change helix/ssd1306.c for select glcdfont.c position
* add variable LOCAL_GLCDFONT into each keymaps rules.mk
* copied lets_slit to splinter
* initial splinter layout
* remove unused keymaps
* implemented second half of the keyboard
* initial definition of tap dance
* the tap dance is working now
tap dance for right hand 4c 2r
hold - shift
single tap - n
double tap - ñ
triple tap - Ñ
* clear the keymap.c
* put the tap state on to array
* the n tilde tap dance should produce right shift if hold
* add esc grv tap dance
* remove the defined SS_LSFT on tap_dance.h
because it was added on the quantum.h
* minor cleanup for the keymap
* use the X_* on tap dance
* added super alt tap dance
* use the NO_TAP on tap dance reset
* allow track what rows and cols pressed
* added the RGUI_ALT
* keymap arrangement
* use i2c
* initial rgb
* layer colors
* initial rgb pressed key
* set the layers led
* SUCCESS!!!
* cleaning
* improve shifted layer
* led brightness
* initial caps rainbow
* rename SET_LED_RGB to SET_LED_RGB_HEX
* clean the SET_LED_RGB_HEX and added SET_LED_RGB
* clean format
* caps lock rainbow
* rename key_led to set_key_led
* caps lock rainbow enhanced
* make varibiables static
* change back the loop max value to 360 for the rainbow
* add scroll lock to the rainbow led
* fix pos calculation of right hand board
* add ative keys and make rainbow color can override by key press
* remove the TOTAL_MATRIX_POINTS
* some improvments for the rgb
* call the rgblight_set on the process_record_user
* some enhancement for the leds
* pass the dim value to set_layer_led and limit the brightness on _VL
set the brightness to 2 if the dim value is less than 2 because
their is not enought power for the leds.
* remove the rgb steps on the config
* use the non rev config
* remove all the revisions
* favor i2c instead of serial and remove all the ref for the serial
* clang formatting
* allow to save to eeprom the brightness value
* add bootloader caterina this will enable soft reset key
* initial commit for the userspace
* added my own keymap for splinter
* first working userspace
* move splinter to handwired keyboards
* handwired splinter default keymap
* move some config to my keymap
* cleanup some headers on the keymap
* move the EECONFIG_RGB_DIM to the user space
* I fix remove the GUI on SPC and ENT
* remove the default include on tap_dance.c
* add lights.c and refactoring
* fix wrong source for led index
* seperate the variable on set_layer_led for readabilty.
* set the usb max power consumption to 50
* fix led lighting
* add new enums for tap dance
* use romeve path avr on eeprom.h
* fix wrong spelling on TP names
* changed the tap dance
* allow to set rainbow on some pressed key
* add reset key
* fix error on matrix.c if ROW2COL is used
* add extraflags -flto
* See e2352d4
* Got no love from i2c, serial to the rescue
* Fix the led will lit up to color red after boot
* Trial if the power can handle yellow color at full
* Add comment
* Use EE_HANDS
* add config.h in the use space
* KC_N on BL should wrap in SFT_T
* See d13567d, put it back but increase 1 level
* Fix led soldering mistake
* set the tapping_term to 100
* Use TT for the changing the layer
* Remove the changing space to enter and vice version on BL and UL
* Increate the tapping term
* Use tap dance on changing layer
* Add assorted layer
* propery way to tapdance
* Remove DA_EGRV
This also fix the wrong placement of the reset and dance lspr should register
the KC_LGUI on finished not unregistered.
* Remove the media control to the up and down layer
* Remove the interrupted state of the tap dance
* swapt the space and enter on to th caps
* Shorthand
* Keymap update
* My keymap for lets_split
* cleaning
* edited keymap and fitted for tada68
* edited rules to make mouse work
* filled config.h to make mouse cursor move more smooth
* added descriptive readme
* added hhkb eric
* dz60 and hhkb
* editted eric hhkb and dz60
* Added HHKB Config
* Removed HHKB Config
* Added HHKB Config
* Changed the legends on HHKB info.json
* Added Tada68 ISO Config and Staryu
* Removed Tada68 ISO Config
* Add naKey on behalf of ckeys
* Update James's code to more modern QMK standards
* Add info.json for QMK Configurator support
* Fix that build breakage
* Rename naKey.c to nakey.c
* Rename naKey.h to nakey.h
* Use the new debounce algorithm in dactyl/matrix.c [#2065]
This incorporates the fixed/optimized debounce code added to
quantum/matrix.c in:
* 508eddf8ba
* 4c6960835c
* 32f88c0717
* f403028974
* a06115df19
* Fix the row/column swap in dactyl [#2065]
With a column-driven keyboard, reading from the mcp23081 returns a
column-state, which takes some extra work to translate into the
row-state used in the actual matrix. The ergodox_ez code sidestepped
that problem by calling rows "columns" and columns "rows." With this
change, the dactyl now calls rows "rows" and columns "columns."
* Cleanup: variable names, documentation [#2065]
* Support MATRIX_MASKED in dactyl/matrix.c [#2065]
* Only unselect one col in unselect_col [#2065]
Bonus: saves one i2c transaction per matrix_scan!
* Implement COL2ROW in dactyl/matrix.c [#2065]
* Fix a typo in dactyl/matrix.c
This entirely doesn't matter. The PORT values are set during
init_keyboard and never change. They're repeatedly set to the same
thing. These PORT lines shouldn't even exist, but since they do, they
should at least look right.
* Implement COL_PINS/ROW_PINS for dactyl [#2065]
* Rename "mcp23018" to "expander" [#2065]
I honestly don't know whether/how well this code works with other I/O
expanders, but at least in theory, it should be generic enough to work
with others. Given that, the variable names shouldn't refer to a
specific model of expander.
* Remove matrix_power_up from dactyl/matrix.c [#2065]
It's commented out in quantum/matrix.c, and the dactyl has no power
up/down behavior beyond being unplugged (which goes to matrix_init), so
there's no sense keeping it around.
* Only initialize expander_input_mask once [#2065]
...and rename input_mask to expander_input_mask, since now that it isn't
scoped to init_expander it isn't clear that it's only for the expander.
* Rename LAYOUT to LAYOUT_all
Add additional layouts for the pearl with all splits
and the pearl with splits but a 6.25u spacebar.
* add new layouts to info.json
* Change handling of adjust layer to make it more LT(...) friendly.
* Update based on feedback from drashna.
* Change handling of adjust layer to make it more LT(...) friendly. This reworks handling to make it a little more friendly to include in keymaps.
* QMK Configurator updates for the Pearl 40%
Attempt to get the physical layout as displayed in the Configurator more true-to-life.
* Bugfixes per mechmerlin
"By changing KEYMAP to LAYOUT in the .h file, all the keymaps who rely on KEYMAP are now broken. You need to go into the keymap directory and fix all the keymaps affected by this change. Should just be an issue of renaming KEYMAP to LAYOUT."
* Merge pull request #2 from noroadsleft/noroadsleft-patch-20180425
Bugfixes per mechmerlin
* keymap.c updates for Pearl
-#include "pearl.h"
+#QMK_KEYBOARD_H
* Update config.h
Matrix pinout updated to current revision.
* Add updated matrix, define RGB pin
Matrix updated to current pinout, pin for WS2812 defined.
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* CU75 keymap fix
Incorrect keymap now fixed
* Add new project files for UT47
* Copy over keymap and related files
* Add LED_controls.ino
* Add README instructions
* Attempt sending press byte data
* Disable mousekeys
* Enable sending serial data to LED controller
* Update LED mode names
* Remove extra file
* Add LED enable flag
* Update READMEs with more info
* Credit original author
* Update copyrights
* Update docs
* Changed based on review
* Move layout screenshot to Imgur
* Append to src
* Enable mousekeys to fix bad keycodes
* Additional changes based on feedback
* Fix fn layer keys
* Helix keyboard OLED, RGBLIGHT enable/disable control integrate into rules.mk
rules.mk: add 4 Variables for compile control.
# Helix keyboard customize
# you can edit follows 4 Variables
# jp: 以下の4つの変数を必要に応じて編集します。
OLED_ENABLE = no # OLED_ENABLE
LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
LED_ANIMATIONS = yes # LED animations
config.h: auto set RGBLED_NUM by HELIX_ROWS and rules.mk's define
* HELIX_ROWS define move from config.h to rules.mk
* add readme.md
* rename readme.md to readme_jp.md
* add readme.md and modify readme_jp.md
* nyquist
* danielhklein nyquist setup
* shift left controls
* remove readme
* cleanup before pr
* ready for pr
* updated bootmagic, arrows, and special chars
* allow gui on arrows
* replace arrows with right modifiers
* documentation re-added
* updated personal repo
* fixes to layers
* DRambo Planck keymap in Colemak
* DRambo Planck keymap in Colemak
* Satan GH60 keymap for Bri
QWERTY layout with Navigation layer toggled with "Caps Lock" key.
* xd75 keymap in Colemak for Mac and Win
* DRambo Planck keymap in Colemak
* Satan GH60 keymap for Bri
QWERTY layout with Navigation layer toggled with "Caps Lock" key.
* xd75 keymap in Colemak for Mac and Win
* Added Iris Colemak layout for Mac, Windows, and Gaming.
* changed comment text
* DRambo Planck keymap in Colemak
* Satan GH60 keymap for Bri
QWERTY layout with Navigation layer toggled with "Caps Lock" key.
* xd75 keymap in Colemak for Mac and Win
* Added Iris Colemak layout for Mac, Windows, and Gaming.
* changed comment text
* Added Iris keymap from DavidRambo
* Added planck keymap from DavidRambo
* Added xd75 keymap from DavidRambo
* Added readme
* Deleted redundant repos in Iris, Planck, and XD75 keymaps.
* Tweaked XD75 keymap
* DRambo Planck keymap in Colemak
* Tweaked XD75 keymap
* Merge branch 'master' of https://github.com/DavidRambo/qmk_firmware
Removed redundant repos with "Rambo" title.
* changed iris nav layers
* changed nav layers for xd75
* Updated Iris, tweaked nav on xd75
* add mechmerlin 60 ansi layout
* put meaningful #defines
* missed the backslash
* add merlin split layout
* rename to have a -ansi
* Add appropriate readme files
* rename KEYMAP to LAYOUT
* support for default layout
* support for the community keymaps
* make sure I don't break the configurator
* Don't break the configurator Merlin
* initial commit for meme keyboard
* Fix that row by column
* Fix those dimensions
* work in progress commit
* got that switch matrix to work
* add all supported layouts
* add info.json for QMK configurator support
* let my name be known
* alpha with firmware added to list of keyboards, ready to push
* revised according to drashna's fixes
* keymap -> layout?
* fixed macro and improved layout issuesOC
* Update rules.mk
* Update alpha.h
* Update and rename keyboards/alpha/layouts/default/28_alpha/keymap.c to keyboards/alpha/keymaps/default/keymap.c
* alpha/readme.md added according to qmk templateOC
* resolved a careless merge conflict
* bugfix
* Fixed /keyboards/alpha/readme.md formatting issues
* Add personal Tada68 keymaps
* remove uneccessary tada68 folder
* recommit with temp name
* remove bad folder name
* fix bullet list format
* rename to fezzant
* remove unnecessary config.h file
* Add userspace to talljoe layout.
* Move more authority to userspace and create Bananasplit layout.
* Move more things into userspace.
* Common Core example
* More work on common layout.
* Num layer.
* talljoe-ansi layout
* Updates for Zeal60
* Add Zeal60 to 60_ansi_split_bs_rshift
* Swap Escape and Grave
* Num-layer tweaks
* More tweaks.
* Add 1up60rgb to world of layouts.
* Rename ansi_split_bs_rshift layout to hhkb.
* Control RGB Backlight.
* change capslock led
* Remove obsolete line from rules.mk.
* Add user-friendly userspace override.
* Fix enter for 1uprgb60
* Revert "Rename ansi_split_bs_rshift layout to hhkb."
This reverts commit 53133719db.
* Adds initial keyboard config and layouts for ALF X2 60%
* Cleans up empty if/else blocks
* Renames KEYMAP to LAYOUT across the alf_x2 config files.
* Replaces include in alf_x2 keymaps with QMK_KEYBOARD_H macro
* Re-add NO_SECRETS option
* Add Thumb Clusters defines for default layout
* Minor tweaks
* More Minor tweaks
* Revert Orthodox layers and move function keys around
* Fix keymap so it will compile under the Infinity
Since I haven't added 'pretty' layouts to it yet
* Cleanup of userspace
* Cleanup keymaps
* OMG fix Workman
* Move mods layer key around
* Reduce debounce in Ergodox EZ
* Fix Infinity layers
* Add list of pins used by Ergdox EZ for easy reference
* Revert "Reduce debounce in Ergodox EZ"
This reverts commit 8a3db2673b419ef8032c40a6d29156cef632f9cd.
* Add Clicky toggle to Orthodox
* Fix Audio Clicky keycode
* Enable Faux Clicky by default
* Add Unicode stuff
* alpha with firmware added to list of keyboards, ready to push
* revised according to drashna's fixes
* keymap -> layout?
* fixed macro and improved layout issuesOC
* Update rules.mk
* Update alpha.h
* Update and rename keyboards/alpha/layouts/default/28_alpha/keymap.c to keyboards/alpha/keymaps/default/keymap.c
* alpha/readme.md added according to qmk templateOC
* resolved a careless merge conflict
* bugfix
* added an iso layout that supports split backspace and split rshift
* added a keymap which uses the iso layout with split backspace and split rshift
* added a #define LAYOUT_ for the KEYMAP_
* fixed missing newline
* Updated info and fixed minor errors
* Updated folder name; overdue updates to keymap and readme files
Updated folder name; overdue updates to keymap and readme files
* Change KEYMAP to LAYOUT
* add layouts that match the layouts hasu has defined for alps64
* add layouts in info.json for aek, standard, and infinity
* Add LAYOUT_iso and LAYOUT_all along with respective info.json LAYOUTs
* Line ending stuff again
* Added base launchpad files and a default layout
* Updated KEYMAP to LAYOUT, also editing default keymap a bit and added a readme
* Initial commit for donutcat's 15x15 monstrosity
* modify readmes to be more descriptive
* Add info.json to support QMK Configurator
* Update copyright and change REPLACE_WITH_YOUR_NAME to MechMerlin
* update naming convention for ScrabblePad
* remove .vscode directory as per Jack's comments
* Add Haegin's keymap
* Potential improvements to the keyboard
* Add haegin minidox layout
* Add Haegin's keyboard to ergodox layouts
* Update Haegin's minidox keymap
* Add home, end, and page up and down
* Magic Backspace
Backspace still acts as control when you hold it down, but if you tap it
twice and hold it's a held backspace. Tapping it more than twice it
continues to act as backspace, but it deletes more characters with each
tap with the quantity deleted based on the fibonacci sequence.
* Switch to deleting words after 4 taps
When hitting backspace, after 4 taps this switches to deleting by word
because if you're hitting backspace that frantically you must need to
delete a lot of stuff. Holding backspace after 4 taps will delete words
in the same way that holding alt+backspace deletes words on a normal
keyboard.
* Add Faux Clicky to main Audio feature
* Make clicky settings user configurable
* Add additional documentation
* Don't play when music mode is enabled (hopefully)
This is done via MI_BENDD and MI_BENDU. At the moment the value is
hardcoded and cannot be adjusted (future commit?) and is the max for the
`midi_send_pitchbend` function (up or down).
`MI_BENDD` and `MI_BENDU` both require `#define MIDI_ADVANCED`
MIDI pitch bend was already implemented in `protocol/midi.c`, I merely
added the keycodes to trigger them. :) (thanks to Jack, two years ago
in commit fb4fe52c apparently)
* Copy Chibios serial_usb_driver into the chibios/protocol
It's renamed to usb_driver to avoid name conflicts
* Make the usb driver compile
* Disable ChibiOS serial usb driver for all keyboards
* Change usb_main to use QMKUSBDriver
* Initialize the usb driver buffers
* Add support for fixed size queues
* Fix USB driver initialization
* Don't transfer an empty packet for fixed size streams
* This adds a keymap to the MF68 labeled factory. It is an attempt to mimic the layout on the factory keycaps of the non-backlit board.
There are some small differences:
1) FN+WASD are an arrow cluster
2) FN+Z (Start media player) and FN+] (Start Calculator) are not mapped
3) FN+GHJKL are Backlight controls
4) An FN2 layer exists for future growth
5) The CAPS key is maped as FN2, for CAPS Lock use FN+CAPS
* Changed the CAPS key to be CAPS Lock on short press, FN2 on hold
Added LED controls to FN+Arrow Keys to better mimic factory backlit boards.
* AJP10304 layouts for Planck and JJ40 now have mouse support. Moved macros onto Adjust layer
* .gitignore for intellij iml files.
* Updated Macros to use send string
* DRambo Planck keymap in Colemak
* DRambo Planck keymap in Colemak
* Satan GH60 keymap for Bri
QWERTY layout with Navigation layer toggled with "Caps Lock" key.
* xd75 keymap in Colemak for Mac and Win
* DRambo Planck keymap in Colemak
* Satan GH60 keymap for Bri
QWERTY layout with Navigation layer toggled with "Caps Lock" key.
* xd75 keymap in Colemak for Mac and Win
* Added Iris Colemak layout for Mac, Windows, and Gaming.
* changed comment text
* DRambo Planck keymap in Colemak
* Satan GH60 keymap for Bri
QWERTY layout with Navigation layer toggled with "Caps Lock" key.
* xd75 keymap in Colemak for Mac and Win
* Added Iris Colemak layout for Mac, Windows, and Gaming.
* changed comment text
* Added Iris keymap from DavidRambo
* Added planck keymap from DavidRambo
* Added xd75 keymap from DavidRambo
* Added readme
* Change KEYMAP macro to LAYOUT macro
* Add CU24 QMK Configurator Support
- Change KEYMAP macro to LAYOUT macro
- Add new LAYOUTS to support a default numpad
* QMK Configurator Support for CU75
Add LAYOUT_all to support all layouts
Add corresponding info.json
* fix: Miss commnts.
* edit: Enter position
* Add: config.h
* Edit: Double space key
* fix: Lower and Raise
* delete: Not used keys.
* edit: change position Lower and Raise
* Add: Functions
* 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
* 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
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.
* 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
* 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
* fixed comment typo
* Fixes invalid capitalization
Uppercase yes is invalid, so make treats it as no, which is
confusing when it seems like it should have found the method
definition for unicode.
* Own keymap, comma in mitosis
Own keymap is qwerty, workman, numbers, punctuation, function/mouse
layers, gaming, unicode, numberpad.
There are some small differences:
1) FN+WASD are an arrow cluster
2) FN+Z (Start media player) and FN+] (Start Calculator) are not mapped
3) FN+GHJKL are Backlight controls
4) An FN2 layer exists for future growth
5) The CAPS key is maped as FN2, for CAPS Lock use FN+CAPS
* rename KEYMAP to LAYOUT_ALL
* Standard Layout Eagle Refactor
New layout LAYOUT_EAGLE
Got standard layout backspace working
* Remove split right shift support for standard layout eagle
* add back the KC_NO for split right shift
* Remove KC_NO from bottom row to support standard 60 layout
* Fix formatting issues with mechmerlin keymap
* remove extra KC_NO from split right shift in LAYOUT_EAGLE
* Preliminary checkin for new layout LAYOUT_VIPER
* Remove some of the KC_NO from the layout
* Fix formatting
* missed a KC_NO for the LAYOUT_EAGLE
* remove KC_NO from enter key of LAYOUT_VIPER
* some more formatting changes
* Default 60 with split left right shift and backspace
* add info.json layouts to match the new LAYOUTs
* change formatting of LAYOUT names
* propogate renames to info.json
* Change global config.h settings
* Make Shift LED brighter
* Compatibility Tweaks
* Update ASCII art and layer comments
* Add comments about MOD layer
* Change ASCII art for reset, since it was out of date
* Use Overwatch theme for Workman layer
* Fix RGB define comments
* Make sure RGB set list matches
* Stop all notes for custom Faux Click
* Switch to OSM for everything, and remove RGB Sleep
* Never use KEYMAP now
* Only enable RGB Sleep on Non-Ergodox boards
* Cleanup do to new rgblight_list.h file
* Add redirect message for RGB codes
* Update userspace documentation
* Cleanup of Userspace
Add unicode support, and cleaned up comments for ifdef statements
* Remove unneeded slashes
* Unicode handling
* Force NKRO
Add info.json
Change KEYMAP to LAYOUT_ALL to better reflect that this is a
LAYOUT that fits ALL the possible positions for switches.
We will need to make better LAYOUTS for the future.
* Initial commit: Get things compiling
* port the custom matrix code
* Update readme
* make second layer fully transparent
* populate config.h identifiers with more correct information
* Add in switch backlight support
* Enable backlight LEDs, and change pin for RGB
* port TMK version over
* remove all that TMK stuff, it didn't work lol
* Updated readme
* Fix keymap
- Change KEYMAP to LAYOUT
- Adjust formatting of table
* Edit readme to reflect NOTES
* add info.json for QMK configurator support
* Replaced placeholder with MechMerlin
This reverts the changes in #2491, so that Travis will hopefully return to automatic incrementing.
But this includes the layout and userspace excepts, as well.
This finishes fixing #2314, which mostly copies the firmware when compiling.
However, it misses `:teensy`, `:avrdude` and most importantly, `:production`
* Added cpeters1982 keymap folder in lets_split
* Deleted tap dance. need to research error
* Changed keymap to better facilitate SpaceFn
* Trying to get backlighting to work
* Added RGB backlight support
* cleared some cache files per Drashna's instructions
* mitosis/datagrok: make qwerty the default layout
* mitosis/datagrok: update readme to match qwerty default
* mitosis:datagrok: remove redundant name for transparent
meh, decided i don't need an extra key to represent "key that is
transparent because it's a modifier on a layer below." it's a maintenance
burden when moving other keys around
* mitosis:datagrok: add num lock on Blue + QWERTY T
* mitosis:datagrok: tap lshift = tab
we use tab completion a lot so let's get it onto an unmodified key somehow
* mitosis:datagrok: update readme
* mitosis:datagrok: improve notes in README
* mitosis:datagrok: note numlock in README
* configure layer 0 layout for xd60 as ANSI 60%
* update keymap with function key immediately right of spacebar;
shuffle mapping in function layer to my liking
* update readme
* grep -> $(GREP)
Some UNIXy systems (FreeBSD for example) don't use GNU grep by default.
Allow the user to specify which grep implementation to use so that
GNU grep can be specified.
* Allow using versioned avr-gcc command
Don't hardcode "avr-gcc", and allow strings such as "avr-gcc8", or
"avr-gcc-7.3.0" to match checks for "avr-gcc".
* Add Colemak Mod-DH vars
* Add Norman Layot vars
* Set Shift Indicator to include CAPS Lock as well
* Change MEH to GUI
* Add Enter to Macro layer
* Switch raise and lower layers to make more sense (to me)
* Replace unused quote on Ergodox
* Add One Shot defines
* Dim indicator LEDs
* Add short codes for KC_SECRET
* Fix typos
* Update OLKB code in userspace
* Add global userspace config.h
* add compile fix
* Automatically include from userspace
* update readme
* Re-add QMK Scan loop
* Add EEPROM reset code to all keymaps
* Shorten fauxclick sound
* Use layouts instead of keymap, when possible
* Add OSM detection to ergodox
* Convert Viterbi to LAYOUT macro
* Clean up game macros
* Because I accidently removed the C6 AUDIO define from my viterbi... Whoops
* Minor formatting
* Fix Woodpad because it's still there
* Move Ergodox keymap into layouts folder
* Add build date to version macro
* Remove PREVENT_STUCK_MODIFIERS from config
* Added some new songs and my own keymap
* Made Dodger keymap safe to use with backlight disabled
* edited layer switching and added more songs
* changed keymap to lowercase
* Inital layout
* Fix the backspace
* add a number pad
* move the backlight to the adjust layer; move ctrl and delete.
* Update from main repo
* Add initial files for custom keymap
* Light keymap mod
* Change the submodules to match the upstream fork's master branch
* Add a proper ANSI layout
Changed v60_type_r.h to have a proper ANSI layout
Modify keymaps to reflect above changes
Fix comments
* Add new layout to info.json
* Support for tada68 ansi layout.
Avoiding the iso layout as it doesn't seem correct
* whitefox support for configurator
* configurator support for jc65 PCB featuring both the qmk and ps2avrgb versions
* Added support for JJ50 from KPRepublic, no rgb or backlight control yet. Added as a layout of ymd96 at the moment (same microprocessor). Basic keymap with three layers to get started.
* Added support for JJ50
* Update feature_rgblight.md
I got caught out with this as most color pickers use a percentage NOT 0-255 for this number
* Amended description
Woops! Was focused on s/v not being a percentage i got h wrong.
* More ergonomic mousekeys
* integrate some recent hardware changes by changing the Plover keymap
* use TX Bolt support instead of Plover toggles
* switching to steno is no longer as intrusive, so this can move back to BASE
* Preonic Ergodox-Like Mac keymap: Bucktooth
This is a layout unlike most Preonics, it is taken partially from
Ergodox and classic C64 keyboards with a ton of Mac-specific features.
* Fix Mouse Left keycode
* Add mechmerlin keymap and readme for facew board
* Fix keymap
- Backspace as on the wrong key
- HHKB backspace changed to backslash
* Update keymap.c
Change TO to TG for toggle.
* initial branch
* lazy-push
* Fix schema
Updated README, readded DVORAK to keymap.
Updated dir name to lowercase.
* removed executable bit
* testing switched L_GUI position
* Generate api docs from source code
* Add a bunch of doxygen comments
* more doxygen comments
* Add the in-progress api docs
* script to generate docs from travis
* Add doc generation to the travis job
* make travis_docs.sh commit the work it does
* make sure the docs script exits cleanly
* Macro for a momentary layer switch with mods
Passes through to the existing ACTION_LAYER_MODS macro, albeit with more
limited options due to lack of space in the quantum_keycodes enum.
* Add documentation for LM layer-mod macro
* Clean up Tap Toggle documentation
* Configurator Support
- Add info.json to support existing layouts
- Add comment in sweet16.h to remind people to change info.json if
the layout changes.
* Fix dlaroe's keymap
* Add info.json file for qmk_configurator
Unfortunately none of these keymaps look like a board I've seen in
the wild. Some further tweaks will have to be done to the keymaps
directly.
* add comment indicating need to edit info.json when keymap changes
* Fix tilde in xd75 skewwhiffy
* Small tidy up
* Tidy up Colemak row
* Tidy up navigation layer
* Symbols layer redefined
* Fix UK Quote issue
* Use UK_QUOT rather than KC_QUOT
* Added my keymap
* maybe that wasn't quite right.
* Reduced the tap time to register layer
* changed the tapping term that fits my typing speed a little better
* Added retro tapping and reduced tapping term duration
This is an inelegant hack for #2522 but makes things work. Basically we give `action.c` a chance to handle the hold event early so that we can swap the keyboard for later keys. Later, to allow the hold to happen again quickly we nuke the key record so that tapping is reset. I tried to find a cleaner way, honestly.
* duplicate keyboards/helix/rev2/keymaps/default to keyboards/helix/rev2/keymaps/led_test
* OLED & RGB LED on
* duplicate quantum/rgblight.[ch] to keyboards/helix/rev2/keymaps/led_test
* rgblight.c modify for RGB test
This makes possible to use SEND_STRING with a spanish keyboard for almost all symbols except the ones that require ALT, which are documented on the code comments.
I am not adding any documentation because the functionality is not complete until a way to specify alted symbols is added.
* add SCREEN_NAV layer for copy/pasting within screen
* working readreg/paste macros
* working read reg / paste macros
* write log and tran patterns, and expand
* add ls -la shortcut, add tab on combined layer
* put delete word on the right pinky key on shell_nav layer
* add TAB on the right side, add reset key
* added Cloud9 macros
* add cloud9 shortcuts to atreus layout
* added BROWSER_CONTROL layer
* finalized browser control layer
* adding comment
* add browser control layer to atreus
* add flashing command line
* remove the tab on combined layer
* Fixed plank keymaps so that they will compile for planck light
* tv44:budi now compiles
* s60_x:amnesia0287 now compiles
* Fixed allocation of key_combos so that narze keymap for planck can compile correctly
* Disabled rgb on ergodone and infinity
* Enabled tap dance so it compiles
* Added return statement so it compiles
* If compiling on light disable extra functionality
* Properly redefined variable so it compiles
* Added Contra keyboard support
The configuration came from a source distribution of the firmware on the
Contra's official website.
I have also included a simple MIDI keymap. (And it works!)
* Changes to Contra config and README
* Readme has been changed as requested by jackhumbert
* Config has been changed to add the Cartel and Contra names to
the USB configuration.
* Added a heavily customized German keymap to the XD75RE
* A heavily customized alternative layout for the XD75, for German users
* Fixed capitalization, removed unnecessary files
* Hopefully fixed capitalization, some keymap changes
* qwerty_code_friendly: minor updates
- Correct mistake in ascii keymap.
- Make lower right key delete again, but make it configurable.
- Make double shift for double quotes optional.
* qwerty_code_friendly: shift users title-caps
* Add navigation layer for hjkl arrow keys
* Fix Oscillope keymap after jj40.h changes. Also fix jj40.c so that it can build without rgblight if you don't want that enabled.
* Fixed compilation of the ps2avrGB keyboard/firmware
This commit fixes the silent compilation error for the ps2avrGB
keyboard/firmware. This error was caused by a lacking default
keymap which it did not have because all keyboards based on it were
moved to another directory. I also added the required config.h
options so it's possible to compile it again and (probably)
flash it on a b.mini.
Lastly, I updated the README to reflect the current state.
This commit fixes#2425
* Referenced the pearl in the ps2avrGB REAMDE
Added a reference to the pearl keyboard in the README of the ps2avrGB keyboard as it is originally based on the firmware as well.
- Remove action_get_macro in favor of process_record_user
- Support user defined words on layer 3 (pass via flags)
- Support backspace & del on left thumb cluster.
(optionally override top right backspace).
* Add extra RGUI key to make keyboard more MAC friendly
* Remove enumerators for no longer used layers in layout Skewwhiffy for XD75
* Make layer numbers even better
* Add `SGUI()` as an alias of `SCMD()` for consistency with `KC_GUI`
* Add `SGUI_T()` as an alias of `SCMD_T()` for consistency with `KC_GUI`
* Make SGUI the primary name
* Checkin of tada keymap and initial commit for e6v2.
* checking in other remaining changes before trying to merge
* Reverting pin change. This was done based on the json orginally provided by exclusive, but it was later determined my map was the correct one based on user testing
* fix extra key for ansi keymap. Didn't include fn as standard ansi shift is not split but still had it in keymap
* Fix default help file and add reset to default
* add SCREEN_NAV layer for copy/pasting within screen
* working readreg/paste macros
* working read reg / paste macros
* write log and tran patterns, and expand
* add ls -la shortcut, add tab on combined layer
* put delete word on the right pinky key on shell_nav layer
* add TAB on the right side, add reset key
* added Cloud9 macros
* add cloud9 shortcuts to atreus layout
* added BROWSER_CONTROL layer
* finalized browser control layer
* adding comment
* add my config
* fix backlight, clean up that code
* group background code, restore static var
* qwerty is supposed to be in the middle
* wrap layer change backlight in ifdef
* backlight levels and some more 'emojis'.
* Restructure to make it possible to press cmd ent on the right side of the board with one hand.
* Expose the period through the number layer. Add Hyper keys to mouse layer
* reduce mouse speed
* add a : -P key
* Thumbs up and down, remove some keys that are duplicated via function keys, clean up
* fix build issues
* add various emoji
* duplicate default Meira keymaps
* Miera updates
* add documented but unmapped emoji
* Sound for the Meira, was stumped by a file size! Thanks drashna!
* add docs
* docs
* revert lib changes...
* clean up
* clean up
* remove make file
* Fixes missing key
* Move to a more cross-platform grep command
* Use sed to strip out AVR_SIZE instead
* tada68: layout: add new layout tshack
Adds "James Shackleford's UNIX layout" for the Tada68
Based heavily on the keymap by hexwire.
1. Moved LALT to LCTL; I don't need CTL because of ESCC.
1. Moved RAISE to old LALT.
1. Moved ENTER to old RAISE.
1. Move QUOTE to old ENTER.
1. Moved PLUS to old QUOTE.
1. replaced music next and volume up with browser forward and back
through history
* Add to list of predefined rgb colors
* Change layer colors, to reflect new options
* Use Tag Toggle instead
* Clean up macros and add breathing indication for OSM Layer
* Get Viteri Macropad working properly
* Disable unused action features
* Use I2C because that's smaller, apparently
* Remove viterbi-half code
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* Addition of cu75
Addition of cu75 keyboard, uses libraries from LFKeyboards directory which are path linked to reduce file duplication.
Minor fix on cu24 readme
* Minor Readme Fix
* Adds JC65 ps2avrGB keyboard
* Adds default keymap
* Adds personal keymap
* Backlight On/off support
Migrated code from the BFake. Functionality only on BL_ON, BL_OFF,
BL_TOGG.
* Backlighting config adjustment
Only 1 level supported.
* Personal keymap update
BL toggle added and RGB layer updates.
* Renamed jc65 ps2avrgb directory
Renamed directory for more clarity.
* Default keymap and default rules
* Personal keymap and personal rules
* Group JC65 QMK and PS2 versions
Group JC65 QMK and PS2 versions, Split directories, Readme for parent
folder.
* Default keycaps and personal keymaps re-added
Default and personal keymaps re-added. Keymaps, Readme, Rules.mk, and
config.h
* v32a default keymap rules
Default to no.
* RGB and Backlight default settings
Set to yes.
* Rules.mk defaults for personal keymap
Rules.mk defaults for personal keymap
* Revised keyboard readme make paths
Revised.
* Path correction
* jc65 default folder set
set default pcb to qmk version
* default rules for v32a
set to enable backlight and rgb by default.
* Skip process_music in NO_MUSIC_MODE is defined
* Skip matrix_scan_music if NO_MUSIC_MODE is defined
* Skip music_all_notes_off if NO_MUSIC_MODE is defined
* Leave matrix_scan_music in, because it reduces firmware size by 150b....
* Add docs for NO_MUSIC_MODE
* Move lufa descriptor to protocol/usb_descriptor
* Try to compile usb_descriptor on ChibiOS
* Add lufa_utils for ChibiOS
Lufa USB descriptors for ChibiOS
* More lufa_util compatibility fixes
* First compiling version of shared USB descriptor
* Send the usb descriptors
* Fix the CONSOLE output on ChibiOS
* Add errors for unsupported interfaces
* Enable support for vitual serial port USB descriptors
* Implement virtual serial port for ChibiOS
* Cleanup the lufa_utils
Use the default lufa header files
* Add raw hid support for ChibiOS
This is completely untested
* Enable midi compilation on ChibiOS
* Move midi functionality out of lufa.c
* Don't register sysex callback when not needed
* ChibiOS compilation fixes
* Update ChibiOS submodule
* Fix the Midi USB descriptor
It didn't work properly when both Midi and Virtual serial port was enabled.
* Add MIDI support for ChibiOS
* Fix USB descriptor strings on ChibiOS
* Use serial usb driver for raw hid
* Generalize the ChibiOS stream like drivers
This makes the initialization much more simple and eliminates a lot of
the code duplication.
* Convert console output to chibios stream driver
* Fixes for ChibiOS update
* Update the ChibiOS contrib submodule
To include the usb data toggle synchronization fixes
* Fix duplicate reset enumeration on ChibiOS
* Add missing include
* Add number of endpoints check for ChibiOS
* Enable serial USB driver on all keyboards
* Add missing includes when API is enabled withot midi
* Add another missing inlcude
* New keyboard added
Zen is a split ortholinear currently in group buy.
* remove bad keymap
Keymap was throwing errors
* remove other bad keymap
I should have checked these before haha
* small fix to update folder name
* renamed temp
* renamed to zen
* update folder name
* Slim down matrix code
Suggested by drashna
* move KC_NO
* Update keymap
* change from rev2 to rev1
* Planck-swapped up/down arrows,s65x-add dvorak
* Added Dvorak as first layer of default keymap
* planck-swap up and down arrows. s65x-added dvorak
* added colemak to kelorean s65x keymap
* made more changes to kelorean keymap
* just tryinng to fix bc i was not connected upstrem
* Planck-swapped up/down arrows,s65x-add dvorak
* Added Dvorak as first layer of default keymap
* planck-swap up and down arrows. s65x-added dvorak
* added colemak to kelorean s65x keymap
* Change tapping term to be longer
* Make Audio/Underglow settings permanent
* Use wait_ms rather than _delay_ms
* Readd One Shot Mods
* Switch to Imperial March startup sound
* Move OSM to it's own layer
* Minor Formatting Tweaks
* Keymap Templates and formatting fixes
* added jirgn keymap from dotfiles
* added jirgn s keymap as copy from default
* [TASK] removed unnecessary colemak and dvorak layouts
* [TASK] added right shift with tab to enter
* [TASK] added ctrl keys beside homerow
* [TASK] added Navigation Layer
removed unnecessary BACKLIT
removed Media Controls in Base Layers
* [TASK] added left Navigation mode fixed some doc
* [Fix] locked navigation layer by adding a transparent key for nav_mod
keys
* [TASK] added some more symbols and removed lower F1-F12 keys
* [TASK] added some README and a layout design
* [FIX] forced for adding to repo
* [FIX] forced for adding to repo
* [FIX] problem with layerswitching and hanging ctrl
* removed image from repo
* removed github image link with permalink from layout designer
* removed github image link with permalink from layout designer
* replaced image with permalink to layout editor
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* CU24 Support
Addes Support for the upcoming CU24 keyboard sold by CapsUnlocked
* Removed modular keyboards to make stuff clear
* Lower Case folders
* Remove CU24 - Rename Folder
* Add CU24 - Renamed
* Fixed ignore list
I am stupid
* Create keymap.c
Add Hag keymap, a heavily modified dvorak swedish keymap with multiple layouts and often used stuff under the alpha cluster.
* Create config.h
* Create rules.mk
* Add NIU Mini keymap from Planck keymap
* Remove old keymap files
* Fix README, removed Planck references
* Add default layout, move Planck layout to separate folder
* Update README
* Add my XD60 keymap
* Change RShift to slash
* Fix keymap: stuck on MO(1)
* Move RESET to Fn+Enter
* Add: RGB saturation cycle
* Add numpad layer to keymap
* Fix last case
* Cleanup Mechmini keymap. Once the custom RGB function is defined, there is no need to manually handle RGB code.
* Change default to KEYMAP_MIT, not KEYMAP_OFFSET
* Add custom RGB code for JJ40
* Reset Mechmini advertised power draw to 500. Will have to test actual maximum power draw later.
* RGB working on JJ40.
* Fix: saturation increase/decrease flipped
* Add new directory for my custom keymap with RGB keycodes
* Swap LAlt and LGUI
* Update JJ40 max power draw with measured value
* Update: fun40 rules.mk to enable underglow; earlier failed Travis CI
* Fix: init RGB LEDs on boot. Also added HHKB-like keymap for XD60.
* Super rudimentary backlight test, init RGB LEDs on boot
* Backlighting works - stays on for now
* Toggling working
* Now can override backlight.c functions. Problem was functions in backlight.c weren't called before due to a lack of matrix_scan_quantum() in matrix.c
* Timers not working
* Delete global.h
* Cleanup
* Compiles
* Good sign: LEDs stop working again
* Handle timer1 overflow
* Progress: fix: forgot to init
* Backlighting fully working now except breathing.
* Revert keymap to original keycodes
* Update XD60 keymap README
* Update JJ40 keymap with backlight toggles
* Breathing working just fine.
* Update references
* Add backlight_set() call
* Cleanup code to disable backlight
* Fix: does not compile
* Fix: missing call to rgblight_task.
* Testing with BACKLIGHT_BREATHING
* Cleanup
* Cleanup comments
* More commenting cleanup.
* Do not enable BACKLIGHT_BREATHING by default
* Update XD60 keymap
* Update: move matrix_scan_kb out from matrix.c to jj40.c (kb-level)
* Cleanup for PR
* Fix conflict in readme.md for NIU mini
* Restore original power consumption figure
* Fix: matrix_scan_user() now has to be defined in the keymaps
* Add weak `matrix_scan_user` so it does not have to be defined in keymap
* Add weak matrix_init_user()
* Adding personal BEAKL9 based keymap
Initial commit, very much a WIP/Proof of concept.
* Updating personal BEAKL9 based layout
* F-keys added to upper layer
* planck with a not-quite-neo layout for a de-DE OS/SW keymap
* ergodox infinity with a not-quite-neo layout for a de-DE OS/SW keymap
* add documentation
* Add xd75 layout
* Add Readme
* Update layout
* Remove Backlight keys
* Move ENTER / BACKSP / DEL
* Commit my bepo layout instead of the qwerty version since i will not use it
* Use 0 instead of 00
* Fix TODO key
* Update the readme
* Replace wrong key placment
* Update center column
* Update the layout with 2-u key
* Adjust the fn layer
* Adjust the main layer
* Adjust the fn layer
If BACKLIGHT_ENABLE is set to `yes` in `rules.mk`, then the user
can use the `BL_*` keycodes to adjust the backlight. At the moment,
only on/off is supported.
* started work on halfkeyboard
* update to keymap
* halfkey layouts complete for dvorak and qwerty
* added plover layout to halfkeyboard mapping
* fixed error in dvorak layout right hand
* fixed error in dvorak layout right hand, comments updated
* thing
* added minus and equals to normal layouts
* added minus and equals to normal layouts
* adde visualizer matching halfkeyboard mappings
* adde visualizer matching halfkeyboard mappings
* updated keymaps for mirror handedness functionality for all layers. Also added visualizer code for distinct color for each layer, and LCD text displaying the current layer.
* had a KC_TILD where should have had KC_GRAV
* its spelled KC_GRAVE
* added ATOM47 (Vortex Core QMK powered PCB)
* fixed broken\unfinished comment block
* moved Layer template to default template.
* moved Layer template to default template and removed template from the keymap.c file.
* Added LEdiodes config
* created readme.md
contains an image of 60% board(LEdiodes).
* updated readme.md with images
added images of the PCB and some feature details from https://geekhack.org/index.php?topic=93447.msg2545221#msg2545221
* removed excess words.
* followed the readme template to a T.
* formatting fix : added a return.
* ymdk_np21 initial support
Base support of ymdk_np21 - based on jj40. Full grid layout
* Update README.md
Replacing description.
* Adding YMDK NP21 to comunity list.
Adding YMDK NP21 to community supported list.
* ISO HHKB first commit
* First version of my HHKB ISO Spanish Keymap
* Readme.md
* Added more media keys.
Caps Lock added on function layer.
Backlight toggle added on funtion layer.
* RGB support for WS2812B RGB led strip
* RGB and brightness control.
* Cleanup Mechmini keymap. Once the custom RGB function is defined, there is no need to manually handle RGB code.
* Change default to KEYMAP_MIT, not KEYMAP_OFFSET
* Add custom RGB code for JJ40
* Reset Mechmini advertised power draw to 500. Will have to test actual maximum power draw later.
* RGB working on JJ40.
* Fix: saturation increase/decrease flipped
* Add new directory for my custom keymap with RGB keycodes
* Swap LAlt and LGUI
* Update JJ40 max power draw with measured value
* Update: fun40 rules.mk to enable underglow; earlier failed Travis CI
* Fix: init RGB LEDs on boot. Also added HHKB-like keymap for XD60.
* Super rudimentary backlight test, init RGB LEDs on boot
* Backlighting works - stays on for now
* Toggling working
* Now can override backlight.c functions. Problem was functions in backlight.c weren't called before due to a lack of matrix_scan_quantum() in matrix.c
* Timers not working
* Delete global.h
* Cleanup
* Compiles
* Good sign: LEDs stop working again
* Handle timer1 overflow
* Progress: fix: forgot to init
* Backlighting fully working now except breathing.
* Revert keymap to original keycodes
* Update XD60 keymap README
* Update JJ40 keymap with backlight toggles
* Breathing working just fine.
* Update references
* Add backlight_set() call
* Cleanup code to disable backlight
* Fix: does not compile
* Fix: missing call to rgblight_task.
* Testing with BACKLIGHT_BREATHING
* Cleanup
* Cleanup comments
* More commenting cleanup.
* Do not enable BACKLIGHT_BREATHING by default
* Move faux clicky into userspace
* Get Audio and RGB enabled on Orthodox-rev1
* Add faux click to userspace
* Add Orthodox Rev3 check to macros
* Hack Orthodox Name for drashna keymap
* No more One Shots
* Ergodox product name hack
* Enable Audio on Orthodox by default
* Get audio working on clueboard/60
* add keys for music mode
* Change doubles to floats
* add keys for all the songs
* revert to the default startup sound
* Remove music mode until we can figure out why it crashes
* gordon.c defines many aliases for KC codes.
* gordon.c defines many advanced tap dance functions.
* This is a squashed commit of about 6 months of work on chimera and
ergodox infinity changes.
* Ignore the change-id below.
Change-Id: I83927139e8a80fe08992ae91ec7d62571498f7f7
* Default layout with RGB and in-switch LED controls
This is a variation of the default keymap with added RGB underglow and in-switch LED controls.
* Readme for default_rgb keymap
* ISO keymap with RGB and in-switch LED controls
This is a variation of the default ISO keymap with added RGB Underglow and in-switch LED controls.
* readme for iso_rgb keymap
* Updated ACR60, Mechmini, ALU84 readme information and config.h descripters
Update MECHKEYS keyboards to be uniform in readmes and config.h's PID, MANUFACTORER, and DESCRIPTIONS. This allows the keyboards to be more uniform amongst the different types.
* Rename keyboards/alu84/keymaps/TurboMech/config.h to keyboards/alu84/keymaps/turbomech
* Rename keyboards/alu84/keymaps/turbomech to keyboards/alu84/keymaps/TurboMech/config.h
* Fixed folder naming for alu84/keymaps/turbomech
* fixed error from compile
removed double `return MACRO_NONE;` and `switch (id) {`
* Added initial in-switch LED support for the Eagle/Viper V2.
Currently only has four modes: All ON, Mods/Nums ON, Alphas ON, or All OFF
* Revert keymap changes
* Changed switch curly bracket to match style.
* info.json committed to support the qmk configurator project
These are info.json for each of the keyboards I've contributed to
during my time here at QMK
* change LAYOUT to KEYMAP to adhere to matrix definitions
* Preliminary support for Duck Eagle/Viper V2 60% board. This is a copy of the octagon/v2 with things changed to reach a compiling state
* Get a 60% keymap compiling, this might not be what the eagle/viper
really supports
* Update readme to point to correct GeekHack link
* Get keymap working on a Duck Eagle
* Add code submitted by profanum429
- Add HHKB style top row to v2.h
- Modify read_rows function to take into accout the caps lock firmware key
- Modify default keymap to match the new v2.h
- Adjust readmes
* Fix bug related to col 0 not working
* Add keymap for mechmerlin
* Add profanum429's viper hhkb layout
* Add visual representation for mechmerlin layout
Add navigation keys to keymap
* Add a better visual representation to the mechmerlin keymap
* Add profanum429's Viper layout!
* Updated profanum429 keymap to match a full HHKB
Enabled media keys in rules.mk
* Revert "Updated profanum429 keymap to match a full HHKB"
This reverts commit ed914160d7.
* Fix default keymap for Eagle
* Enable extra keys for audio control support
* Modified timings in indicator_leds to accomodate the WS2811S chips on the Eagle/Viper2 PCBs at 800kHz with a 16mHz clock
Modified the backlight settings to not interfere with the default RGB underglow code from QMK
Modified the order of the LEDs in the LED status bar at the top of the Eagle/Viper2 PCBs (3,2,1,6,5,4,8,7 order)
* Cleaned up indicator code to remove unused functions as the RGB underglow uses the
default driver provided by QMK
Commented out backlighting code in v2.c
* update readmes to reflect profanum's awesome contributions and fix typo in make instructions
* Remove custom RGB logic and just rely on QMK RGB underglow. We'll leave the backlighting in place for now
This creates a v1 and v2 subproject. V1 retains all the same implementations of the bootmapper-ported Mechmnini 1 including #2196. V2 adds the Mechmini 2.0 kayboard support (I know it took me way to long to get it a pull request in).
All readme's updated to reflect compiling the two seperate keyboards. Simply either `make mechmini/v1:default` or `make mechmini/v2:defualt`. Utilizing the rules.mk using `make mechmini:default` will automatically create the Mechmini 2 default keymap as this is the current version and has a much wider user base.
* Added V60 Type R Polestar Backlight and RGB Underglow support
* made RGB Underglow stuff optional, to support the non Polestar V60
* updated readme and rules
* fixed typo in readme
* add breathing to bananasplit
* backlight breathing overhaul
* fix the backlight_tick thing.
* fix for vision_division backlight
* fix a few keymaps and probably break breathing for some weirdly set-up boards.
* remove BL_x keycodes because they made unreasonable assumptions
* some fixes for BL keycodes
* integer cie lightness scaling
* use cie lightness for non-breathing backlight and make breathing able to reach true max brightness
* Cleanup Mechmini keymap. Once the custom RGB function is defined, there is no need to manually handle RGB code.
* Change default to KEYMAP_MIT, not KEYMAP_OFFSET
* Add custom RGB code for JJ40
* Reset Mechmini advertised power draw to 500. Will have to test actual maximum power draw later.
* RGB working on JJ40.
* Fix: saturation increase/decrease flipped
* Add new directory for my custom keymap with RGB keycodes
* Swap LAlt and LGUI
* Update JJ40 max power draw with measured value
* Update: fun40 rules.mk to enable underglow; earlier failed Travis CI
* Minor tweaks
modified: users/drashna/drashna.c
* Fix Workman ASCII art
* Add OSM for shifts
* Make Viterbi's 00 code consistant
* Minor Cleanup off Userspace
* Change Tapping Term on Ergodox
* Re-add EEPROM code
* Minor updates and tweaks
* Use QMK_H variables to make keymaps more universal
* Forgot 'break;' for covecube layer
* Tweak Viterbi files now that I have hands on
* Add secrets to Ergodox
* RGB tweaks to Viterbi
* Viterbi RGB layout tweeks
* Minor tweaks
* Add One Shot Mod tap toggle
* Add Faux Clicky to Viterbi, and disable controller's LEDs
* Minor tweaks
* Move D3 keycode defines into userspace
* Updated Userspace Readme
* iso_de_mac
ISO-DE layout with mac media controls
* Delete keymap.c
* iso_de_mac
ISO-DE support with Mac media keys
* Add files via upload
Layout overview
* iso layout support
Adds support for the extra key of ISO
* Update keymap.c
typo-fix
* fixed mac next key
* Delete Layout.png
* Delete keymap.c
* Added ALU84
Added ALU84 from mechkeys.ca. TurboMech keymap is MacOS oriented, need to still update the defualt keymap.
* added alu84 and TurboMech userspace
* updated keymap, config.h and rules.mk for alu84
* zweihander-osx: Remove app keys, etc.
- add right command keys
- add F16 on ;' for Siri
- remove command-Q (too easy to hit)
* Zweihander: update readme
* Preliminary commit for Octagon V1 support
This is essentially a cp -R v2 v1 with a few things changed to
get it to compile and build.
* The Octagon V1 supports up to 84 keys as opposed to the V2 which
supports up to 86. This commit changes the keymap to match it.
* Temporary default keymap just to get things to compile
* Update readme file
* Fix switch matrix
* Fix underglow lighting option
* Fix keymap to take care of shifted columns
* Fix keymap formatting
* Remove un-needed files left over from rasmusx
* Make Octagon V1 have its own keymap directory with default keymap
* Make Octagon V2 have its own keymap directory with default keymap
* Cleanups and readme edits
* adding new layout for the planck that helps when coming from the pok3r
* Fixing the function layer
* Update readme.md
* Update keymap.c
Making some small adjustments
* Update keymap.c
switching GUI and Esc
* Update keymap.c
* adding mod tap on left and right shift
* adding mod tap on left and right shift
* poker keymap for lets split
* fixing the FN layer
* removing unused file
* rename octagon_v2 directory to octagon directory
* Move octagon_v2 files to v2 sub-directory
* Edit readme files
* setup header files for building multiple versions of the Duck
Octagon.
* Changes as per Jack's PR 2170 comments
* Add keymap for my friend's KBD75\nBug : RGUI is read as RALT
* Add keymap for Nyquist
* Add Keymap for Whitefox (Truefox layout only)
* Add Keymap for XD75 and XD73 (XD75 with 1u blocker each on left and right bottom
* Added functions to read HSV values
I have added three functions to rgb_light.c to be able to read the hue, saturation and value from other places.
They are rgblight_get_hue(), rgblight_get_sat(), adn rgblight_get_val().
* Create keymap.c
* Add COSPAD support to QMK
I have ported the COSPAD numpad to qmk.
* Update readme.md
* Update cospad.c
* Line ending stuff again
* Added initial files for Christmas Tree PCB
* Updated Readme and info json's, also config.
* Cleaned up keymap file, added proper comments for keymap. Removed readme leftover from original copy of planck folder structure.
* Forgot to push rules.mk for the V2017 folder, fixed now.
* Initial commit for Octagon V2 Support
This is still basically just a copy of lightsaver support with
names changed.
* Port xauser keymap from: https://github.com/xauser/tmk_keyboard/blob/xauser/keyboard/octagon_v2/keymap_common.h
* Temporary default keymap just to get things compiling
* Modify config.h to have the right keyboard info
* Partial port of xauser matrix code for octagon v2
* Fix readme.md
1. Fix link to geekhack GB
2. Add microchips
3. Add appropriate attributions
* Fix PORTD
* Intermediate fix to get LEDs working
* Update BACKLIGHT_AREAS enum
* Port the following:
backlight_set
backlight_toggle_rgb
backlight_set_rgb
and resolve dependencies in header files
* Port backlight_update_state to led_set_kb
* Change copyright notice author to MechMerlin
* Remove Rasmus keymap
* Get a default keymap that actually does something and let's you reset.
* Convert keymap into KC_XXXX format.
* Better formatting of the default keymap to make it more readable
* Fix keymap
* Get that Fn key working!
* Some code cleanup and small refactor
* Fix keymap in octagon_v2.h
* Line ending stuff again
* Added initial files for Christmas Tree PCB
* Updated Readme and info json's, also config.
* Cleaned up keymap file, added proper comments for keymap. Removed readme leftover from original copy of planck folder structure.
* Initial K-Type support
* Copy PJRC_TEENSY_3_1 to work around watchdog issues
* K-Type: Remove bootloader offset in rules.mk
* Ensure matrix and scan quantum functions are called when needed
This is porting a fix from f5422a70b6
* Added xd60:Jos keymap
* Corrected Layout image for xd60:Jos layout
* Update README for xd60:Jos layout
* Created rules.mk for xd60:Jos layout
* Fixed an edge case for xd60:Jos layout
* Now using a specific for xd60:Jos layout instead of modifying the main one
* Better physical layout image for xd60:Jos layout
* new planck keymap, new feature - hybrid shift/enter action key (great for small keyboards!)
* corrected documentation to specify rules.mk file instead of Makefile
* Initial version of the Ergodox EZ Bépo keymap, TypeMatrix style.
* Update the readme file and add some handling of the keyboard LEDs.
* Toggling layer requires 2 taps.
* Remove a constant as it conflicts with an earier definition.
* Fix a typo in a type name.
* Fix the arrow layer that had a bad number.
* Second main version of my bepo keymap, after the tests of the first one.
* Fix the triggering of the function layer and the handling of the LED.
* Reduce the shining of the LEDs.
* Fix the swap layer (that required a keypress on the other side of the keyboard to be deactivated).
* Duplicate some of the mouse button for easy access.
* Move some of the secondary functions out of the center keys.
* Slightly slow down the mouse and mouse wheel.
* Update the comment and readme.md for the V2 of the keymap.
* Invert button 2 and 3 of the mouse. Really fix the SWAP layer.
* Test with the right alt modifier added as secondary function (on hold) of the space keys. The right alt key becomes a left alt one.
* Add specific shift/ctrl for the FN layer; move some mouse keys around to help with that.
* Remove one FN modifier-on-hold key that was not useful.
* Duplicate the FN layer inside the MOUSE layer.
* Add support (not tested yet) for macro recording and play on a single key as a tap dance.
* Allow to stop recording the macro by tapping once on the macro key (still un-tested).
* Add support for macro recording using some tap dance.
* shorten a comment.
* Reinstate the FN toggle on the percent key (so that there is an FN toggle on the right-hand-side).
* Fix some comments and update the link to the most up-to-date image.
* Small fix to the keymap images.
* Change overwatch to Gamepad
* Remove secrets file
* Add sample sensitive.h file
* Borrow @colinta's secrets.h include method
* Remove unnessary placeholder for macros
* Set secrets to use PROGMEM for char string
* Add readme files to my keymaps and userspace
* ignore libs
* Clang complete file
* Add VIM_A, VIM_S, VIM_COMMAND_SHIFT_D, and VIM_COMMAND_SHIFT_A
Add VIM_A, VIM_S, VIM_COMMAND_SHIFT_D, and VIM_COMMAND_SHIFT_A
a s O
* Comment blocks for minimap
generated at
http://patorjk.com/software/taag/#p=display&h=0&v=0&c=c&f=Banner&t=COMMENT
* Be explicit
* More Comment blocks
* Add J
* add A, C, D, J, S, O
* Make h j k l explicitly vim commands (useful for JOIN)
* add cb ce cw ch cj ck cl db de dw dh dj dk dl vb ve vh vj vk vl x ciw diw viw
* debug messages for ci di vi
* Var capitalized
* Save bytes by disabling mouse keys
* Add Y P
* Be more explicit about which key was pressed
* Be more explicit about which key was sent
* Move project to new directory structure
* Remove non-vim layout folder
* Replace KC_TRNS with KC_NO on normal layer
* Insert Mode as default
* Try to prevent crashes
* Put normal mode back
* Revert "ignore libs"
This reverts commit 4c5d7592d6.
* add rules.mk
* Add mouse bindings
* Checkout most recent keymap following rebase
* Realign mouse button keys
* Make a macro for TO(NORMAL_MODE)
* add i2c lib submodule
* add actuation point adjustment to fc980c
* add actuation point adjustment to fc660c also.
* use https for i2c submodule
* move to existing i2c lib
* properly remove old submodule
* oops, forgot some files for the fc660c
* Line ending stuff again
* Added initital files and layout for the PCB Ruler keyboard/macro pad thing
* Updated Readme
* Changed make command to new format
"unselecting" left-hand rows is a wasted i2c transaction.
On the left-hand side, the ergodox uses a GPIO expander. It
does *not* change "direction" (input/output) of pins, it just
sets pins high or low.
But all the pins are written at once. There's no way to
change just one pin's value; you send a full byte of all eight
row pins. (Not all of them are in use, but that doesn't matter.)
So every pin is either +V or ground. This is in contrast
with the right-hand side, which is using input mode to make pins
be neutral.
So there's no need to "deselect" the rows on the left side
at all. To select row 0, you set the GPIO register for the
rows to 0xFE. The previous code would then set it back to
0xFF, then set it to 0xFD on the next cycle. But we can just
omit the intervening step, and set it to 0xFD next cycle,
and get the same results.
And yes, I tested that the keyboard still works.
On my system, scan rate as reported by DEBUG_SCAN_RATE goes
from 445 or so to 579 or so, thus, from ~2.24ms to ~1.73ms.
Signed-off-by: seebs <seebs@seebs.net>
This link was broken. And the latest, live version of that keymap link doesn't line up with the docs below, so the link will now point to the older version of the file in the git history
* pull fuse settings for bootloader jump
* fix 32a chips
* make automatic bootloader selection optional
* quantify bootloaders
* fixs #164, speeds up dfu reset
* fix for chips w/o usb
* missing an n
* fix bootloader sizes, use words for addresses
* fix bmini, pearl, and [[ issue, make things quiet
* ignore avr errors on arm for now
* update settings for the light
* document bootloader stuff
* add bootloader title
* Copy the ergodox_ez code to handwired/dactyl
Differences from the Ergodox:
* Use QMK_SUBPROJECT_H instead of QMK_KEYBOARD_H, since it's under
handwired
* Omitted several keymaps. They'll eventually be broken (since the
Dactyl has fewer keys), and I don't want to try to fix them.
* Omitted the keymap images for the default layout, since they depict
a different keyboard.
* Everything that said Ergodox now says Dactyl, naturally.
* [whitespace] Delete trailing whitespace
My editor does this automatically so it's just gonna keep cropping up...
* Cut the dactyl down to the right number of columns
(Remember, throughout matrix.c, everything called "row" is really a
column, and vice-versa).
* Remove LED-related code
* Tighten up the Dactyl's build options
* Whitespace cleanup in twimaster.c
* Hardtabs -> spaces
* No more trailing whitespace
* Typo fix
* Correct the CPU frequency units
The Teensy's CPU definitely doesn't run at 16 petahertz...
* Restore access to ONEHAND_ENABLE
I turned it off in 26d47cb42622d990a7c3335e7fcc151aa3edfbf0 while
desperately debugging; I just wanted to ensure it wasn't causing the
problem I was seeing. It was not, in fact, causing the problem, so it's
back.
Also fixed the swap matrix in dactyl.c, since it still referred to
columns that exist in the Ergodox but not the Dactyl.
* Clearer phrasing about TWI's effect on scan rate
* Fix up the Dactyl's firmware-loading instructions
Sadly, the Dactyl has no hole for the onboard reset button.
* Dvorak keymap for the Dactyl
* The Erincalling Layout
* Erincalling layout: Add a := key
I've been working in Go, which uses := a lot, and it's awkward to type
in this layout.
* Dactyl README: link to the dactyl-keyboard repo
* Add a missing copyright line
I don't know how much this matters? Honestly, it's enough for me that my
name is on the git commit. But hey, let's be consistent until there's a
specific reason not to be, right?
* Dactyl: remove commented-out code
I hate it I hate it I hate it
There's not even any information about what it was trying to do!!!! >:(
* Add a note about the row/column ridiculousness
* [whitespace] realign some constants
* Don't claim B4 is tied to VCC
It doesn't matter at all? I honestly don't know what the reason ever
was. It looks like it dates back to the original ErgoDox and I've never
seen one sentence about the purpose.
I've been skipping that wire for some time, and I promise it works fine.
* Dactyl keymaps: Send RALT for right-hand alt key
Not terribly important but I just like things tidy OK
* typo fix
* Refer to "dactyl.h" explicitly
QMK_SUBPROJECT_H has been working locally, but fails in CI. Strange!
* Dactyl: Don't use QMK_SUBPROJECT_H at all
It's still breaking in CI, even though it was a never a problem locally.
* linux shake-around
* move terminal and browser spawning keys
* add a shift to window resizing keys to free combo up for window management
* "jump to tab" shortcuts for firefox
* change window resize modifiers
* change wm keys
* change wm keys again, and reformat keymap to 80chars
* typos
* language key
* qwerty layer for SO, general cleanup
* adds my xd75 layout
* add secret strings to 'secrets.h' behind compile flag, assign defaults
* macro keys now have defaults (hidden in colinta.h) before any recording, and after clearing the dynamic macros.
* fixed whitespace - using 4 spaces instead of 2
With these changes, the ergodox ez goes from 315 scans per second
when no keys are pressed (~3.17ms/scan) to 447 (~2.24ms/scan).
The changes to the pin read are just condensing the logic, and
replacing a lot of conditional operations with a single bitwise
inversion.
The change to row scanning is more significant, and merits
explanation. In general, you can only scan one row of a keyboard
at a time, because if you scan two rows, you no longer know
which row is pulling a given column down. But in the Ergodox
design, this isn't the case; the left hand is controlled by an
I2C-based GPIO expander, and the columns and rows are *completely
separate* electrically from the columns and rows on the right-hand
side.
So simply reading rows in parallel offers two significant
improvements. One is that we no longer need the 30us delay after
each right-hand row, because we're spending more than 30us
communicating with the left hand over i2c. Another is that we're
no longer wastefully sending i2c messages to the left hand
to unselect rows when no rows had actually been selected in the
first place. These delays were, between them, coming out to
nearly 30% of the time spent in each scan.
Signed-off-by: seebs <seebs@seebs.net>
This is particularly relevant for, e.g., the ergodox EZ and
other keyboards with slow scan rates. Without changing the API or
behavior of individual process_record() calls, we allow a
configuration flag to make multiple calls in a single scan.
This will probably have miniscule effects on non-steno users,
and it's not enabled by default for any keyboards. Added note
about it to ergodox README.
Signed-off-by: seebs <seebs@seebs.net>
* move underglow led count from parent to child
* Added pearl support
* Added personal keymap for pearl
* start splitting up ps2avrGB boards
* clean up ps2avrgb boards
* Move keycodes to their own section
* Clarify `KC_PWR` vs `KC_POWER`. Fixes#1994.
* Cleaned uppersonal userspace and keymaps (#1998)
* Cleanup of keymaps
* Remove Tap Dance from Orthodox keymap
* Cleaned up userspace and keymaps
* Added sample (template)userspace files to my folder
* Document the Teensy hardware reset problem
* add mfluid keymap to atreus62
* Update hand_wire.md
Change "Resin" to "Rosin"
* Add keyboard: mt40 (#2001)
* add keyboard: chinese planck clone
* rename chinese_planck to mt40
* add image for the mt40 board
* lets_split: Fix matrix_init for ROW2COL
Signed-off-by: Marian Rusu <rusumarian91@gmail.com>
* Add Keymap for Whitefox Truefox layout
* Add keyboard: ACR60 (#1999)
* base acr60 keyboard folder created
* mitch acr60 keymap updates, documentation
* latest keymap updates
* slight modifications to layer switching
* Changes to Atreus and Ergodox EZ Dvorak 42key layout (#1997)
* importing 42 key dvorak layout
* added comment for build instructions
* adding atreus dvorak 42 key layout
* added readme
* add readme
* build instructions
* additional MEH shortcuts
* added shifted symbols on symbols layer
* working extra symbols on COMBINED layer
* bring atreus layout inline with the ergodox one
* add necessary macros
* working ls macro
* added more shell macros
* added screen rename / screen number macros
* add ctrl-a key in shell-nav to use screen more easily
* added shell screen layer
* assign screen switching macros to screen layer
* define all screen switching macros
* more screen-related shortcuts added on shell screen layer
* change shell nav bottom right row to match base layer (backspace / delete)
* remove some mappings on SHELL_NAV layer as they are now in the screen layer
* added more screen macros
* changes to COMBINED layer (pipe on the right) and modified shell nav
* moved pipe/backslash to then right
* documented SHELL_SCREEN layer
* put backspace/delete on SHELL_NAV layer
* add an explicit lisence file for github to pickup
* Updated keymaps to allow base layer alternation for QWERTY, Colemak & Dvorak (#1962)
* First commit of the Terminus_Mini firmware and the DivergeJM version of the Nyquist firmware
* Fix terminus_mini & nyquist/DivergeJM readme files
Previously an outdated copy of the default readme. Updated to match the Nyquist/DivergeJM format (DivergeJM is a split 5x12 implementation of the terminus_mini layout)
* Update makefiles to rules.mk
Renamed both Makefiles to rules.mk, removed references to makefiles
* Updated rules.mk
Inadvertantly removed important code from the rules.mk in previous commit. This has been restored.
Also disabled Tap_Dance in both rules.mk files
* Moved terminus_mini to handwired
Realised that existing directory was not appropriate for the terminus_mini project, moved to handwired.
* New Frosty Flake layout for QFR TKL
Added a TKL layout for the Frosty Flake with a navigation cluster on LOWER under the left hand and a similarly functioning MOUSE layer that includes mouse navigation functionality.
* README fix & keymap update for 3 keyboards
Fixed the markdown for the handwired/terminus_mini:default, Nyqyist:DivergeJM & frosty_flake:QFR_JM.
Added TAPPING_TERM = 150 to config.h for all keyboards
Switched LT(LOWER) and LAlt on the mod row for ortholinear boards.
* Update readme for QFR_JM to include make instructions
* Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware"
This reverts commit a45f264ada, reversing
changes made to 62349c3341.
* Revert "Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware""
This reverts commit eae54fb3be.
* Added QWERTY support to the QFR_JM
Implemented variable default base layer from the Planck default keymap.
* Update README to reflect QWERTY support
* Nyquist:DivergeJM - Update RESET location
Add a reset button to both hands, accessible when halves are disconnected.
* Typo fix
* Update DivergeJM
Switched master to Left hand,
Moved Reset key to a different location
* Added macros to send R pointer & dplyr pipe
Macros added as a string of keypresses, couldn't figure out how to get SEND_STRING to work.
* Added ADJUST -> QWERTY, DVORAK, COLEMAK
Re-implemented update_tri_layer fuctionality to reset base layer for Terminus_Mini & DivergeJM Nyquist keymaps to QWERTY, DVORAK or COLEMAK via the ADJUST layer.
Updated ReadMe files accordingly.
* Fix base layout diagram for Terminus_Mini
Remove split from diagram
* Changed the R operators to SEND_STRING, rather than keypress macros
* Added Dvorak to the QFR_JM keymap
* fixed duplicate row in Nyquist keymap
* Fix readme - LAlt location on mouse layer
* Set EE_HANDS to allow either Nyquist hand to work as master.
* Update R operator strings, clean up layering for terminus_mini, QFR_JM and DivergeJM
"<-" to " <- "
"%>%" to " %>% "
Also played around with the layering, removed unnecessary TAP_TOGGLE for LOWER and shuffled FUNCTION and MOUSE momentary actions to reflect layer order.
* Update bottom alpha row to output symbols on LOWER
This row now outputs the following (z -> /) when in the LOWER layer:
<-
%>%
{
[
`
|
]
}
.
/
* Updated readme files for QFR_JM, terminus_mini & DivergeJM
QFR_JM readme reflects correct LOWER bottom row symbol output,
terminus_mini & DivergeJM reflect correct command line make instructions.
* Add media keys to QFR_JM LOWER - Replicate QFR default functionality
* Fix issue with Mouse layering
Stuck on mouse layer because the wrong macro was assigned to the 'exit layer' key. Reassigned that key.
* Changed " <- " to "<- " for QFR_JM, terminus_mini & DivergeJM
* Add "KC_MAKE" to userspace example
* QMK DFU bootloader generation (#2009)
* adds :bootloader target
* update planck and preonic revisions
* remove references to .h files for planck
* update preonic keymap
* only add keyboard.h files that exist
* add production target
* hook things up with the new lufa variables
* update rules for planck/preonic
* back backlight key turn of status led when pressed
* add manufacturer/product strings to bootloader
* fix push script
* Added support for let's split kailh socket version (#2010)
* Added support for socket version of the let's split
* renamed files
* socket-version-works
* fix up lets_split keymaps
* fix up lets_split keymaps
* shrink preonic by a bit
* fix lets_split keyboards
* update travis script
* update travis script
* update version silencing
* - 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!).
* adds :bootloader target
* update planck and preonic revisions
* remove references to .h files for planck
* update preonic keymap
* only add keyboard.h files that exist
* add production target
* hook things up with the new lufa variables
* update rules for planck/preonic
* back backlight key turn of status led when pressed
* add manufacturer/product strings to bootloader
* First commit of the Terminus_Mini firmware and the DivergeJM version of the Nyquist firmware
* Fix terminus_mini & nyquist/DivergeJM readme files
Previously an outdated copy of the default readme. Updated to match the Nyquist/DivergeJM format (DivergeJM is a split 5x12 implementation of the terminus_mini layout)
* Update makefiles to rules.mk
Renamed both Makefiles to rules.mk, removed references to makefiles
* Updated rules.mk
Inadvertantly removed important code from the rules.mk in previous commit. This has been restored.
Also disabled Tap_Dance in both rules.mk files
* Moved terminus_mini to handwired
Realised that existing directory was not appropriate for the terminus_mini project, moved to handwired.
* New Frosty Flake layout for QFR TKL
Added a TKL layout for the Frosty Flake with a navigation cluster on LOWER under the left hand and a similarly functioning MOUSE layer that includes mouse navigation functionality.
* README fix & keymap update for 3 keyboards
Fixed the markdown for the handwired/terminus_mini:default, Nyqyist:DivergeJM & frosty_flake:QFR_JM.
Added TAPPING_TERM = 150 to config.h for all keyboards
Switched LT(LOWER) and LAlt on the mod row for ortholinear boards.
* Update readme for QFR_JM to include make instructions
* Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware"
This reverts commit a45f264ada, reversing
changes made to 62349c3341.
* Revert "Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware""
This reverts commit eae54fb3be.
* Added QWERTY support to the QFR_JM
Implemented variable default base layer from the Planck default keymap.
* Update README to reflect QWERTY support
* Nyquist:DivergeJM - Update RESET location
Add a reset button to both hands, accessible when halves are disconnected.
* Typo fix
* Update DivergeJM
Switched master to Left hand,
Moved Reset key to a different location
* Added macros to send R pointer & dplyr pipe
Macros added as a string of keypresses, couldn't figure out how to get SEND_STRING to work.
* Added ADJUST -> QWERTY, DVORAK, COLEMAK
Re-implemented update_tri_layer fuctionality to reset base layer for Terminus_Mini & DivergeJM Nyquist keymaps to QWERTY, DVORAK or COLEMAK via the ADJUST layer.
Updated ReadMe files accordingly.
* Fix base layout diagram for Terminus_Mini
Remove split from diagram
* Changed the R operators to SEND_STRING, rather than keypress macros
* Added Dvorak to the QFR_JM keymap
* fixed duplicate row in Nyquist keymap
* Fix readme - LAlt location on mouse layer
* Set EE_HANDS to allow either Nyquist hand to work as master.
* Update R operator strings, clean up layering for terminus_mini, QFR_JM and DivergeJM
"<-" to " <- "
"%>%" to " %>% "
Also played around with the layering, removed unnecessary TAP_TOGGLE for LOWER and shuffled FUNCTION and MOUSE momentary actions to reflect layer order.
* Update bottom alpha row to output symbols on LOWER
This row now outputs the following (z -> /) when in the LOWER layer:
<-
%>%
{
[
`
|
]
}
.
/
* Updated readme files for QFR_JM, terminus_mini & DivergeJM
QFR_JM readme reflects correct LOWER bottom row symbol output,
terminus_mini & DivergeJM reflect correct command line make instructions.
* Add media keys to QFR_JM LOWER - Replicate QFR default functionality
* Fix issue with Mouse layering
Stuck on mouse layer because the wrong macro was assigned to the 'exit layer' key. Reassigned that key.
* Changed " <- " to "<- " for QFR_JM, terminus_mini & DivergeJM
* importing 42 key dvorak layout
* added comment for build instructions
* adding atreus dvorak 42 key layout
* added readme
* add readme
* build instructions
* additional MEH shortcuts
* added shifted symbols on symbols layer
* working extra symbols on COMBINED layer
* bring atreus layout inline with the ergodox one
* add necessary macros
* working ls macro
* added more shell macros
* added screen rename / screen number macros
* add ctrl-a key in shell-nav to use screen more easily
* added shell screen layer
* assign screen switching macros to screen layer
* define all screen switching macros
* more screen-related shortcuts added on shell screen layer
* change shell nav bottom right row to match base layer (backspace / delete)
* remove some mappings on SHELL_NAV layer as they are now in the screen layer
* added more screen macros
* changes to COMBINED layer (pipe on the right) and modified shell nav
* moved pipe/backslash to then right
* documented SHELL_SCREEN layer
* put backspace/delete on SHELL_NAV layer
* More keymap fixes. F-row on bottom layer wasn't fully setup, also switched raise/lower keys to use tap-toggle.
* Added PrScr, put Tab back on top layer.
* Fixed build breakage with default keymap (unneeded rgblight.h include)
* Add yuuki keymap
Documentation is still a TODO and the keymap may not be final
* GRV on colon
* add KC_GRV to FN ESC
* more RGB modes
* Update README.md
Add image of layout and fix typo
* switch from jpg to png
For some reason the JPG had red outlines around the keys.
* remove whitespace
* add instruction to reset keyboard before flashing
* gh60 stytle layout
* moved the GH60 style layout to new folder
* add HOME and END
* Add heading
* moved ayanami to other branch
* restructure converters
each converter is its own keyboard and different hardware variants are different subprojects.
remove (seemingly) old method of loading layouts from main Makefile
* call led_set_kb() from overridden led_set()
* put converter back into one folder
* revert some structure changes to bring in line with #1784.
Also attempt to get the BLE thing more properly integrated.
Also also fix led_set() to call led_set_kb().
* Add woodpad
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add woodpad
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Fix rebasing issues
* remove head files
* Fix "macro" issue
* Rename ez keymaps for userspace
* Revert "Rename ez keymaps for userspace"
This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4.
* Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces
* Fix ergodox code
* Remove "drashna-ez" keymap as it's no longer needed
* Migrate majority of code to Userspace
* Add woodpad
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add woodpad
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add forced NKRO
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Fixed Workman song
* update make command and added lit reset
* Fixed formatting to fall in line with official standards
* Minor tweaks
* Removed Leader Keys from Ergodox EZ Keymap
Added KC_RESET that resets board and sets underglow to red
* Tweak reset code
* Fix rebasing issues
* remove head files
* Fix "macro" issue
* Rename ez keymaps for userspace
* Revert "Rename ez keymaps for userspace"
This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4.
* Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces
* Fix ergodox code
* Remove "drashna-ez" keymap as it's no longer needed
avoid the following error when `UNICODEMAP_ENABLE = yes`:
```
quantum/process_keycode/process_unicodemap.c:52:21: error: implicit declaration of function 'pgm_read_dword'
```
* Set up tap dance for layers on the lower button.
* Refactored code to share in the users directory between my two keyboard layouts.
* Small keyboard layout change.
* Updated documentation on oneshot usage in macros/tap dance.
* importing 42 key dvorak layout
* added comment for build instructions
* adding atreus dvorak 42 key layout
* added readme
* add readme
* build instructions
* additional MEH shortcuts
* added shifted symbols on symbols layer
* working extra symbols on COMBINED layer
* bring atreus layout inline with the ergodox one
* add necessary macros
* working ls macro
* added more shell macros
* added screen rename / screen number macros
* add ctrl-a key in shell-nav to use screen more easily
* added shell screen layer
* assign screen switching macros to screen layer
* define all screen switching macros
* more screen-related shortcuts added on shell screen layer
* change shell nav bottom right row to match base layer (backspace / delete)
* remove some mappings on SHELL_NAV layer as they are now in the screen layer
* added more screen macros
* Fix RGBLIGHT startup color
While it's awesome to see the layer indicating code in here (no really!), and the general rule is to not alter the default keymap/code....
The problem with the layer_state_set_kb call handling this, is that the code doesn't seem to be called at startup. So the default layer color won't ever get set on startup. It needs to be called in the init function to be properly set.
I've played with this extensively, and if you check my keymaps, that is precisely why I have the setrgb/sethsv in the init function.
* Removed typo (pipe)
* mitosis/datagrok: reduce features from rules.mk
* mitosis/datagrok: make both layer keys neighbor shift
* mitosis/datagrok: (no-op) tweak some comments
* mitosis/datagrok: set baudrate to 250k
This requires a corresponding change to the mitosis wireless firmware:
https://github.com/reversebias/mitosis/pull/10
* mitosis/datagrok: move design description from code comment to a readme
* mitosis/datagrok: new layout, new shifted keys, efficient LED code
This is experimental, but compiles and seems to work correctly.
* mitosis/datagrok: whoops, move readme.md
* mitosis/datagrok: a minor layout improvement simplifies custom-shifted code
instead of [, .] [? !], using [, ?] [. !] greatly simplifies the code
needed to perform the shifted-key switching. (And keeps , and . on the
same keys that they are under qwerty.)
also: layout improvements for symbols
* mitosis/datagrok: make my code conform to QMK style guidelines
* mitosis/datagrok: TODO note for layout table in README
* mitosis/datagrok: remove led_set_user until i figure out other changes
need to see if the corresponding changes needed in the keyboard-level code
is okay.
* mitosis/datagrok: simpler layer indicator
* mitosis/datagrok: undo change to keyboard baud; make it in my layout dir.
* mitosis/datagrok: apply same punctuation hack to qwerty layer
* mitosis/datagrok: enable qwerty layer toggle
* mitosis/datagrok: update readme
* Add satan keymap: HHKB-alike based on dbroqua's, with mouse functionality and without LED functionality
* move mouse layer to DOUBLE_HOLD, add UTIL layer for TRIPLE_HOLD
- UTIL layer
- currently has "RESET" key and nothing else.
- functionality otherwise covered by bootmagic should go here
- small bugfix: dispatch of [QTY]_HOLD should be based on range tap count
falls in, not exact count.
* Added support for Knops Mini (3x2 macropad) keyboard.
* Added better documentation, according to the QMK standards.
* Fixed typo.
* Changed names of files to comply with QMK standards.
* Ignored makefile in keymap.
* Removed makefiles and added my credentials in the copyrights.
* adds .qmk file type as a target
* adds info.json with vendor and product
* add files for qmk info script
* add layout file for planck
* ignore .qmk files
* more settings
* update rules for avr and chibios
* update .qmk generation for info.json and inheritence
* Typo: Github => GitHub
* Typo: windows => Windows, docker => Docker, and some punctuations
* "QMK Introduction" links to the right file
* "Unix" rather than "UNIX", which is a trademark
* Directory name is "keyboards", not "keyboard"
* "handwired" is a subdirectory of "keyboards"
* Punctuation and minor fixes
* macOS rather than Mac
* Punctuation and other minor fixes
* Vagrant Guide links to an existing file
* Jun Wako referenced with his name rather than his nickname
* Saxon genitive 's outside the link
* Add woodpad
* Cleanup
* Remove misc layouts for woodpad
* Move woodpad to handwired
* Updated RGB Underglow info
* Cleanup macros
* Fix odd merge issue
* Tweaked RGB lighting stuff
* Start to merge orthodox/ergodox keymaps (persistant layers)
* Add forced NKRO
* Added Colemak and Dvorak layers to default orthodox keymap
* Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow
* Updated macros and added workman keymaps
* Fixed RGB lighting for Workman layout
* Add leader keys
* Remove force NKRO
* Add Viterbi one handed layout and minor tweaks to others
* Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts
* Made "make" keystroke universal
* Clean up and updates of drashna keymaps
* Add workman layer to planck
* Update to keymaps
* Fix accidental commit because I don't know how to git
* Fix makefile toggle code in ez keymap
Finish adding RGB code to orthodox
* missing underscore in init function declaration
* Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function
* Remove unnecessary planck layout
* Created Kona Classic config
* Fixed KonaClassic config
* Updated README
* Updated Readme to conform to format standards
* Added ANSI and ISO layout options
* Fixed images in Readme
* Added labels to images
* Added absolute links to images in Readme
* Image link updates again
* Fixed bottom row keys in some layouts
* Fixed Grave and Tilde
* Fixed Underglow in Kona Classic configs
* Renamed KonaClassic to kona_classic
* add RETRO_TAP: tap anyway, even after TAP_TERM, if no interruption
* consistent variable name
* add option doc
* change name for consistency
* make RETRO_TAPPING default to off
* 🔧 add editorconfig
This makes supported editors automatically change their settings to match desired code styles
* 🔧 add extension recommendation for VSCode
This will cause VS Code to prompt the user to install the EditorConfig extension when they open the project.
If this is felt to be too opinionated, I can revert it.
* Fix pointer device options
when the feature was added, the appropriate option definition wasn't created. This needs to be added to function properly.
* Update common_features.mk
* missing underscore in init function declaration
I'm almost 100% sure "else if (state->count = 2) {" was a typo (it should have two ='s for a logical operator), and I'm *pretty* sure "if (state->interrupted || state->!pressed) return SINGLE_TAP;" has a typo. At least, it returns an error on my machine saying something about an unexpected '!'.
I changed it to a slightly longer form (i.e., "state->pressed==0"), and that worked fine.
* First commit of the Terminus_Mini firmware and the DivergeJM version of the Nyquist firmware
* Fix terminus_mini & nyquist/DivergeJM readme files
Previously an outdated copy of the default readme. Updated to match the Nyquist/DivergeJM format (DivergeJM is a split 5x12 implementation of the terminus_mini layout)
* Update makefiles to rules.mk
Renamed both Makefiles to rules.mk, removed references to makefiles
* Updated rules.mk
Inadvertantly removed important code from the rules.mk in previous commit. This has been restored.
Also disabled Tap_Dance in both rules.mk files
* Moved terminus_mini to handwired
Realised that existing directory was not appropriate for the terminus_mini project, moved to handwired.
* New Frosty Flake layout for QFR TKL
Added a TKL layout for the Frosty Flake with a navigation cluster on LOWER under the left hand and a similarly functioning MOUSE layer that includes mouse navigation functionality.
* README fix & keymap update for 3 keyboards
Fixed the markdown for the handwired/terminus_mini:default, Nyqyist:DivergeJM & frosty_flake:QFR_JM.
Added TAPPING_TERM = 150 to config.h for all keyboards
Switched LT(LOWER) and LAlt on the mod row for ortholinear boards.
* Update readme for QFR_JM to include make instructions
* Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware"
This reverts commit a45f264ada, reversing
changes made to 62349c3341.
* Revert "Revert "Merge branch 'master' of https://github.com/mogranjm/qmk_firmware""
This reverts commit eae54fb3be.
* Added QWERTY support to the QFR_JM
Implemented variable default base layer from the Planck default keymap.
* Update README to reflect QWERTY support
Previously, this code was implemented in keymap.c, but I'm unaware of
someone with a different implementation of this particular hack. [If
someone has it, we can add another #ifdef in the future.]
* Added personal minivan keymap
more consistent layer setup
documentation!
slide some things around
more doc jiggling
* Small layout and documentation tweaks
Small documentation updates
dropped Makefile that for some reason was still in my branch
* found and removed extra makefile
* added bfake support as a subproject
also moved existing bmini stuff to a subproject
fixed columns
minor keymap update
making this a subproject
remove old stuff
got subproject stuff figured out
* travis was upset because a board didn't have a default keymap
- [ ] Alteration (enhancement/optimization) of existing feature(s)
- [ ] New behavior
## Description
<!-- A few sentences describing what it is that you'd like to see in QMK. Additional information (such as links to spec sheets, licensing info, other related issues or PRs, etc) would be helpful. -->
about: Anything else that doesn't fall into the above categories.
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
<!-- Please check https://docs.qmk.fm/#/support for additional resources first. If that doesn't answer your question, choose the bug report template instead, as that may be more appropriate. -->
QMK strives to be an inclusive and tolerant community. We welcome participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
QMK strives to be an inclusive, tolerant, and welcoming community. We encourage participation from anyone regardless of age, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, political belief, race, religion, or sexual identity and orientation.
> “A gentle word turns away wrath, but a harsh word stirs up anger.”
> “A gentle word turns away wrath, but a harsh word stirs up anger."
Our users, contributors, and collaborators are expected to treat each other with respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. Some examples of behavior we will not tolerate include, but is not limited to:
Our users, contributors, and collaborators are expected to treat each other with kindness and respect, to assume good intentions, and to gently correct, where possible, rather than react with escalation. While our goal is to be as accurate as possible, kindness and understanding are more valuable than correctness. Some examples of behavior we will not tolerate include, but is not limited to:
QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Flasher, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
## What is QMK Firmware?
## How to get it {#how-to-get-it}
QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Toolbox, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
## How to Get It
If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork.
Otherwise, you can either download it directly ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), or clone it via git (`git@github.com:qmk/qmk_firmware.git`), or https (`https://github.com/qmk/qmk_firmware.git`).
## How to compile {#how-to-compile}
## How to Compile
Before you are able to compile, you'll need to [install an environment](getting_started_build_tools.md) for AVR or/and ARM development. Once that is complete, you'll use the `make` command to build a keyboard and keymap with the following notation:
@@ -20,6 +27,6 @@ This would build the `rev4` revision of the `planck` with the `default` keymap.
make preonic:default
## How to customize {#how-to-customize}
## How to Customize
QMK has lots of [features](features.md) to explore, and a good deal of [reference documentation](http://docs.qmk.fm) to dig through. Most features are taken advantage of by modifying your [keymap](keymap.md), and changing the [keycodes](keycodes.md).
We welcome all keyboard projects into QMK, but ask that you try to stick to a couple guidelines that help us keep things organised and consistent.
## Naming your directory/project
All names should be lowercase alphanumeric, and separated by an underscore (`_`), but not begin with one. Your directory and your `.h` and `.c` files should have exactly the same name. All folders should follow the same format.
## `readme.md`
All projects need to have a `readme.md` file that explains what the keyboard is, who made it, where it is available, and links to move information (template coming).
## Image/Hardware files
In an effort to keep the repo size down, we're no longer accepting images of any format in the repo, with few exceptions. Hosting them elsewhere (imgur) and linking them in the readme.md is the preferred method.
Any sort of hardware file (plate, case, pcb) can't be stored in qmk_firmware, but we have the [qmk.fm repo](https://github.com/qmk/qmk.fm) where such files (as well as in-depth info) can be store, and viewed on [qmk.fm](http://qmk.fm). Downloadable files are stored in `/<keyboard>/` (name follows the same format as above) which are served at `http://qmk.fm/<keyboard>/`, and pages are generated from `/_pages/<keyboard>/` which are served at the same location (.md files are generated into .html files through Jekyll). Check out the `lets_split` directory for an example.
## Non-production/handwired projects
We're happy to accept any project that uses QMK, including prototypes and handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder!
## Warnings as errors
When developing your keyboard, keep in mind that all warnings will be treated as errors - these small warnings can build-up and cause larger errors down the road (and keeping them is generally a bad practice).
## Licenses
If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, in this format:
Copyright 2017 Your Name <your@email.com>
## Technical details
If you're looking for more information on making your keyboard work with QMK, [check out this guide](porting_your_keyboard_to_qmk.md)!
This page describes how to setup debugging for ARM MCUs using an SWD adapter and open-source/free tools. In this guide we will install GNU MCU Eclipse IDE for C/C++ Developers and OpenOCD together with all the necessary dependencies.
This guide is catered towards advance users and assumes you can compile an ARM compatible keyboard on your machine using the MAKE flow.
## Installing the software
The main objective here is to get the MCU Eclipse IDE correcly installed on our machine. The necesarry instructions are derived from [this](https://gnu-mcu-eclipse.github.io/install/) install guide.
### The xPack Manager
This tool is a software package manager and it is used to help us get the necesarry depencencies.
XPM runs using Node.js so grab that form [here](https://nodejs.org/en/). After installation, open a terminal and type `npm -v`. A reply with the version number means that the instalation was successful.
XPM instalation instructions can be found [here](https://www.npmjs.com/package/xpm) and are OS specific. Entering `xpm --version` to your terminal should return the software version.
### The ARM Toolchain
Using XPM it is very easy to install the ARM toolchain. Enter the command `xpm install --global @gnu-mcu-eclipse/arm-none-eabi-gcc`.
### Windows build tools
If you are using windows you need to install this!
Now its the time to install your programer's drivers. This tutorial was made using an ST-Link v2 which you can get from almost anywhere.
If you have an ST-Link the drivers can be found [here](https://www.st.com/en/development-tools/stsw-link009.html) otherwise consult the manufuturer of your tool.
### OpenOCD
This dependency allows SWD access from GDB and it is essential for debugging. Run `xpm install --global @gnu-mcu-eclipse/openocd`.
### Java
Java is needed by Eclipse so please download it from [here](https://www.oracle.com/technetwork/java/javase/downloads/index.html).
### GNU MCU Eclipse IDE
Now its finally time to install the IDE. Use the Release page [here](https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/) to get the latest version.
## Configuring Eclipse
Open up the Eclipse IDE we just downloaded. To import our QMK directory select File -> Import -> C/C++ -> Existing code as Makefile Project. Select next and use Browse to select your QMK folder. In the tool-chain list select ARM Cross GCC and select Finish.
Now you can see the QMK folder on the left hand side. Right click it and select Properties. On the left hand side, expand MCU and select ARM Toolchain Paths. Press xPack and OK. Repeat for OpenOCD Path and if you are on windows for Build Tool Path. Select Apply and Close.
Now its time to install the necessary MCU packages. Go to Packs perspective by selecting Window -> Open Perspective -> Others -> Packs. Now select the yellow refresh symbol next to the Packs tab. This will take a long time as it is requesting the MCU definitions from various places. If some of the links fail you can probably select Ignore.
When this finishes you must find the MCU which we will be building/debugging for. In this example I will be using the STM32F3 series MCUs. On the left, select STMicroelectonics -> STM32F3 Series. On the middle window we can see the pack. Right click and select Install. Once that is done we can go back to the default perspective, Window -> Open Perspective -> Others -> C/C++.
We need to let eclipse know the device we intent to build QMK on. Right click on the QMK folder -> Properties -> C/C++ Build -> Settings. Select the Devices tab and under devices select the appropriate variant of your MCU. For my example it is STM32F303CC
While we are here let's setup the build command as well. Select C/C++ Build and then the Behavior tab. On the build command, replace `all` with your necessary make command. For example for a rev6 Planck with the default keymap this would be `planck/rev6:default`. Select Apply and Close.
## Building
If you have setup everything correctly pressing the hammer button should build the firmware for you and a .bin file should appear.
## Debugging
### Connecting the Debugger
ARM MCUs use the Single Wire Debug (SWD) protocol which comprises of the clock (SWCLK) signal and the data (SWDIO) signal. Connecting this two wires and ground should be enough to allow full manipulation of the MCU. Here we assume that the keyboard will be powered though USB. The RESET signal is not necessary as we can manually assert it using the reset button. For a more advance setup, the SWO signal can be used which pipes printf and scanf asynchronously to the host but for our setup we will ignore it.
NOTE: Make sure the SWCLK and SWDIO pins are not used in the matrix of your keyboard. If they are you can temporarily switch them for some other pins.
### Configuring the Debugger
Right click on your QMK folder, select Debug As -> Debug Configuration. Here double click on GDB OpenOCD Debugging. Select the debugger tab and enter the configuration necessary for your MCU. This might take some fiddling and googleing to find out. The default script for the STM32F3 is called stm32f3discovery.cfg. To let OpenOCD know, in the Config options enter `-f board/stm32f3discovery.cfg`.
NOTE: In my case this configuration script requires editing to disable the reset assertion. The locations of the scripts can be found in the actual executable field usually under the path `openocd/version/.content/scripts/board`. Here I edited `reset_config srst_only` to `reset_config none`.
Select Apply and Close.
### Running the Debugger.
Reset your keyboard.
Press the bug icon and if all goes well you should soon find yourself in the debug perspective. Here the program counter will pause at the beginning of the main function and way for you to press Play. Most of the features of all debuggers work on ARM MCUs but for exact details google is your friend!
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:
If you feel you meet these requirements, shoot us an email at hello@qmk.fm with an introduction and some links to your keyboard!
* **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!
This is a c header file that is one of the first things included, and will persist over the whole project (if included). Lots of variables can be set here and accessed elsewhere (namely keymaps). This file can exist at a couple different levels:
QMK is nearly infinitely configurable. Wherever possible we err on the side of allowing users to customize their keyboard, even at the expense of code size. That level of flexibility makes for a daunting configuration experience, however.
There are two main types of configuration files in QMK- `config.h` and `rules.mk`. These files exist at various levels in QMK and all files of the same type are combined to build the final configuration. The levels, from lowest priority to highest priority, are:
* QMK Default
* Keyboard
* Folders (Up to 5 levels deep)
* Keymap
## QMK Default
Every available setting in QMK has a default. If that setting is not set at the Keyboard, Folder, or Keymap level this is the setting that will be used.
## Keyboard
```c
#ifndef CONFIG_H
#define CONFIG_H
This level contains config options that should apply to the whole keyboard. Some settings won't change in revisions, or most keymaps. Other settings are merely defaults for this keyboard and can be overridden by folders and/or keymaps.
#include"config_common.h"
## Folders
// config options
#endif
```
This file contains config options that should apply to the whole keyboard, and won't change in revisions, or most keymaps. The revision block here only applies to keyboards with revisions.
## Revisions
```c
#ifndef <revision>_CONFIG_H
#define <revision>_CONFIG_H
#include"config_common.h"
// config options
#endif
```
For keyboards that have revisions, this file contains config options that should apply to only that revisions, and won't change in most keymaps.
Some keyboards have folders and sub-folders to allow for different hardware configurations. Most keyboards only go 1 folder deep, but QMK supports structures up to 5 folders deep. Each folder can have its own `config.h` and `rules.mk` files that are incorporated into the final configuration.
## Keymap
```c
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
This level contains all of the options for that particular keymap. If you wish to override a previous declaration, you can use `#undef <variable>` to undefine it, where you can then redefine it without an error.
#include"config_common.h"
# The `config.h` File
// config options
This is a C header file that is one of the first things included, and will persist over the whole project (if included). Lots of variables can be set here and accessed elsewhere. The `config.h` file shouldn't be including other `config.h` files, or anything besides this:
#endif
```
#include "config_common.h"
This file contains all of the options for that particular keymap. If you wish to override a previous declaration, you can use `#undef <variable>` to undefine it, where you can then redefine it without an error.
# Config Options
## Hardware Options
*`#define VENDOR_ID 0x1234`
* defines your VID, and for most DIY projects, can be whatever you want
*`#define PRODUCT_ID 0x5678`
* defines your PID, and for most DIY projects, can be whatever you want
*`#define DEVICE_VER 0`
* defines the device version (often used for revisions)
* COL2ROW or ROW2COL - how your matrix is configured. COL2ROW means the black mark on your diode is facing to the rows, and between the switch and the rows.
* key combination that allows the use of magic commands (useful for debugging)
*`#define USB_MAX_POWER_CONSUMPTION`
* sets the maximum power (in mA) over USB for the device (default: 500)
*`#define SCL_CLOCK 100000L`
* sets the SCL_CLOCK speed for split keyboards. The default is `100000L` but some boards can be set to `400000L`.
```c
#define VENDOR_ID 0x1234 // defines your VID, and for most DIY projects, can be whatever you want
#define PRODUCT_ID 0x5678 // defines your PID, and for most DIY projects, can be whatever you want
#define DEVICE_VER 0 // defines the device version (often used for revisions)
## Features That Can Be Disabled
#define MANUFACTURER Me // generally who/whatever brand produced the board
#define PRODUCT Board // the name of the keyboard
#define DESCRIPTION a keyboard // a short description of what the keyboard is
If you define these options you will disable the associated feature, which can save on code size.
#define MATRIX_ROWS 5 // the number of rows in your keyboard's matrix
#define MATRIX_COLS 15 // the number of columns in your keyboard's matrix
*`#define NO_DEBUG`
* disable debugging
*`#define NO_PRINT`
* disable printing/debugging using hid_listen
*`#define NO_ACTION_LAYER`
* disable layers
*`#define NO_ACTION_TAPPING`
* disable tap dance and other tapping features
*`#define NO_ACTION_ONESHOT`
* disable one-shot modifiers
*`#define NO_ACTION_MACRO`
* disable old style macro handling: MACRO() & action_get_macro
*`#define NO_ACTION_FUNCTION`
* disable calling of action_function() from the fn_actions array (deprecated)
#define MATRIX_ROW_PINS { D0, D5, B5, B6 } // pins of the rows, from top to bottom
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } // pins of the columns, from left to right
#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 } // pins unused by the keyboard for reference
#define MATRIX_HAS_GHOST // define is matrix has ghost (unlikely)
#define DIODE_DIRECTION COL2ROW // COL2ROW or ROW2COL - how your matrix is configured
// COL2ROW means the black mark on your diode is facing to the rows, and between the switch and the rows
## Features That Can Be Enabled
#define AUDIO_VOICES // turns on the alternate audio voices (to cycle through)
#define C6_AUDIO // enables audio on pin C6
#define B5_AUDIO // enables audio on pin B5 (duophony is enable if both are enabled)
If you define these options you will enable the associated feature, which may increase your code size.
#define BACKLIGHT_PIN B7 // pin of the backlight - B5, B6, B7 use PWM, others use softPWM
#define BACKLIGHT_LEVELS 3 // number of levels your backlight will have (not including off)
*`#define FORCE_NKRO`
* NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots.
*`#define STRICT_LAYER_RELEASE`
* force a key release to be evaluated using the current layer stack instead of remembering which layer it came from (used for advanced cases)
#define DEBOUNCING_DELAY 5 // the delay when reading the value of the pin (5 is default)
## Behaviors That Can Be Configured
#define LOCKING_SUPPORT_ENABLE // mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
#define LOCKING_RESYNC_ENABLE // tries to keep switch state consistent with keyboard LED state
*`#define TAPPING_TERM 200`
* how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
*`#define TAPPING_TERM_PER_KEY`
* enables handling for per key `TAPPING_TERM` settings
*`#define RETRO_TAPPING`
* tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
* See [Retro Tapping](feature_advanced_keycodes.md#retro-tapping) for details
*`#define TAPPING_TOGGLE 2`
* how many taps before triggering the toggle
*`#define PERMISSIVE_HOLD`
* makes tap and hold keys trigger the hold if another key is pressed before releasing, even if it hasn't hit the `TAPPING_TERM`
* See [Permissive Hold](feature_advanced_keycodes.md#permissive-hold) for details
*`#define IGNORE_MOD_TAP_INTERRUPT`
* makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the `TAPPING_TERM` for both keys.
* See [Mod tap interrupt](feature_advanced_keycodes.md#ignore-mod-tap-interrupt) for details
*`#define TAPPING_FORCE_HOLD`
* makes it possible to use a dual role key as modifier shortly after having been tapped
* See [Hold after tap](feature_advanced_keycodes.md#tapping-force-hold)
* Breaks any Tap Toggle functionality (`TT` or the One Shot Tap Toggle)
*`#define LEADER_TIMEOUT 300`
* how long before the leader key times out
* If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped.
*`#define LEADER_PER_KEY_TIMING`
* sets the timer for leader key chords to run on each key press rather than overall
*`#define LEADER_KEY_STRICT_KEY_PROCESSING`
* Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify `MT(MOD_CTL, KC_A)` if you want to use `KC_A`.
*`#define ONESHOT_TIMEOUT 300`
* how long before oneshot times out
*`#define ONESHOT_TAP_TOGGLE 2`
* how many taps before oneshot toggle is triggered
*`#define QMK_KEYS_PER_SCAN 4`
* Allows sending more than one key per scan. By default, only one key event gets
sent via `process_record()` per scan. This has little impact on most typing, but
if you're doing a lot of chords, or your scan rate is slow to begin with, you can
have some delay in processing key events. Each press and release is a separate
event. For a keyboard with 1ms or so scan times, even a very fast typist isn't
going to produce the 500 keystrokes a second needed to actually get more than a
few ms of delay from this. But if you're doing chording on something with 3-4ms
scan times? You probably want this.
*`#define COMBO_COUNT 2`
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature.
*`#define COMBO_TERM 200`
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
*`#define TAP_CODE_DELAY 100`
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
#define IS_COMMAND() ( \ // key combination that allows the use of magic commands (useful for debugging)
// the following options can save on file size at the expense of that feature
#define NO_DEBUG // disable debuging (saves on file size)
#define NO_PRINT // disable printing (saves of file size)
#define NO_ACTION_LAYER // no layers
#define NO_ACTION_TAPPING // no tapping for layers/mods
#define NO_ACTION_ONESHOT // no oneshot for layers/mods
#define NO_ACTION_MACRO // no macros
#define NO_ACTION_FUNCTION // no functions
*`#define RGB_DI_PIN D7`
* pin the DI on the WS2812 is hooked-up to
*`#define RGBLIGHT_ANIMATIONS`
* run RGB animations
*`#define RGBLED_NUM 12`
* number of LEDs
*`#define RGBLIGHT_SPLIT`
* Needed if both halves of the board have RGB LEDs wired directly to the RGB output pin on the controllers instead of passing the output of the left half to the input of the right half
*`#define RGBLED_SPLIT { 6, 6 }`
* number of LEDs connected that are directly wired to `RGB_DI_PIN` on each half of a split keyboard
* First value indicates number of LEDs for left half, second value is for the right half
* When RGBLED_SPLIT is defined, RGBLIGHT_SPLIT is implicitly defined.
*`#define RGBLIGHT_HUE_STEP 12`
* units to step when in/decreasing hue
*`#define RGBLIGHT_SAT_STEP 25`
* units to step when in/decreasing saturation
*`#define RGBLIGHT_VAL_STEP 12`
* units to step when in/decreasing value (brightness)
*`#define RGBW_BB_TWI`
* bit-bangs TWI to EZ RGBW LEDs (only required for Ergodox EZ)
#define FORCE_NKRO // NKRO by default requires to be turned on, this forces it to be on always
## Mouse Key Options
#define PREVENT_STUCK_MODIFIERS // when switching layers, this will release all mods
*`#define MOUSEKEY_INTERVAL 20`
*`#define MOUSEKEY_DELAY 0`
*`#define MOUSEKEY_TIME_TO_MAX 60`
*`#define MOUSEKEY_MAX_SPEED 7`
*`#define MOUSEKEY_WHEEL_DELAY 0`
#define TAPPING_TERM 200 // how long before a tap becomes a hold
#define TAPPING_TOGGLE 2 // how many taps before triggering the toggle
## Split Keyboard Options
#define PERMISSIVE_HOLD // makes tap and hold keys work better for fast typers who don't want tapping term set above 500
Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk
#define LEADER_TIMEOUT 300 // how long before the leader key times out
*`SPLIT_TRANSPORT = custom`
* Allows replacing the standard split communication routines with a custom one. ARM based split keyboards must use this at present.
#define ONESHOT_TIMEOUT 300 // how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2 // how many taps before oneshot toggle is triggered
### Setting Handedness
#define IGNORE_MOD_TAP_INTERRUPT // makes it possible to do rolling combos (zx) with keys that convert to other keys on hold
One thing to remember, the side that the USB port is plugged into is always the master half. The side not plugged into USB is the slave.
// ws2812 options
#define RGB_DI_PIN D7 // pin the DI on the ws2812 is hooked-up to
#define RGBLIGHT_ANIMATIONS // run RGB animations
#define RGBLED_NUM 15 // number of LEDs
#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation
#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
There are a few different ways to set handedness for split keyboards (listed in order of precedence):
#define RGBW_BB_TWI // bit-bangs twi to EZ RGBW LEDs (only required for Ergodox EZ)
1. Set `SPLIT_HAND_PIN`: Reads a pin to determine handedness. If pin is high, it's the left side, if low, the half is determined to be the right side
2. Set `EE_HANDS` and flash `eeprom-lefthand.eep`/`eeprom-righthand.eep` to each half
* For boards with DFU bootloader you can use `:dfu-split-left`/`:dfu-split-right` to flash these EEPROM files
* For boards with Caterina bootloader (like stock Pro Micros), use `:avrdude-split-left`/`:avrdude-split-right`
3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
// mousekey options (self-describing)
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0
#### Defines for handedness
```
*`#define SPLIT_HAND_PIN B7`
* For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
*`#define EE_HANDS` (only works if `SPLIT_HAND_PIN` is not defined)
* Reads the handedness value stored in the EEPROM after `eeprom-lefthand.eep`/`eeprom-righthand.eep` has been flashed to their respective halves.
*`#define MASTER_RIGHT`
* Master half is defined to be the right half.
### Other Options
*`#define USE_I2C`
* For using I2C instead of Serial (defaults to serial)
*`#define SOFT_SERIAL_PIN D0`
* When using serial, define this. `D0` or `D1`,`D2`,`D3`,`E6`.
*`#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
*`#define MATRIX_COL_PINS_RIGHT { <col pins> }`
* If you want to specify a different pinout for the right half than the left half, you can define `MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT`. Currently, the size of `MATRIX_ROW_PINS` must be the same as `MATRIX_ROW_PINS_RIGHT` and likewise for the definition of columns.
*`#define RGBLED_SPLIT { 6, 6 }`
* See [RGB Light Configuration](#rgb-light-configuration)
*`#define SELECT_SOFT_SERIAL_SPEED <speed>` (default speed is 1)
* Sets the protocol speed when using serial communication
* Speeds:
* 0: about 189kbps (Experimental only)
* 1: about 137kbps (default)
* 2: about 75kbps
* 3: about 39kbps
* 4: about 26kbps
* 5: about 20kbps
# The `rules.mk` File
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.
## Build Options
*`DEFAULT_FOLDER`
* Used to specify a default folder when a keyboard has more than one sub-folder.
*`FIRMWARE_FORMAT`
* Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building.
*`SRC`
* Used to add files to the compilation/linking list.
*`LAYOUTS`
* A list of [layouts](feature_layouts.md) this keyboard supports.
## AVR MCU Options
*`MCU = atmega32u4`
*`F_CPU = 16000000`
*`ARCH = AVR8`
*`F_USB = $(F_CPU)`
*`OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT`
*`BOOTLOADER = atmel-dfu` with the following options:
*`atmel-dfu`
*`lufa-dfu`
*`qmk-dfu`
*`halfkay`
*`caterina`
*`bootloadHID`
## Feature Options
Use these to enable or disable building certain features. The more you have enabled the bigger your firmware will be, and you run the risk of building a firmware too large for your MCU.
*`BOOTMAGIC_ENABLE`
* Virtual DIP switch configuration(+1000)
*`MOUSEKEY_ENABLE`
* Mouse keys(+4700)
*`EXTRAKEY_ENABLE`
* Audio control and System control(+450)
*`CONSOLE_ENABLE`
* Console for debug(+400)
*`COMMAND_ENABLE`
* Commands for debug and configuration
*`COMBO_ENABLE`
* Key combo feature
*`NKRO_ENABLE`
* USB N-Key Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
*`AUDIO_ENABLE`
* Enable the audio subsystem.
*`RGBLIGHT_ENABLE`
* Enable keyboard underlight functionality
*`LEADER_ENABLE`
* Enable leader key chording
*`MIDI_ENABLE`
* MIDI controls
*`UNICODE_ENABLE`
* Unicode
*`BLUETOOTH_ENABLE`
* Legacy option to Enable Bluetooth with the Adafruit EZ-Key HID. See BLUETOOTH
*`BLUETOOTH`
* Current options are AdafruitEzKey, AdafruitBLE, RN42
*`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
*`CUSTOM_MATRIX`
* Allows replacing the standard matrix scanning routine with a custom one.
*`DEBOUNCE_TYPE`
* Allows replacing the standard key debouncing routine with an alternative or custom one.
*`WAIT_FOR_USB`
* Forces the keyboard to wait for a USB connection to be established before it starts up
*`NO_USB_STARTUP_CHECK`
* Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
*`LINK_TIME_OPTIMIZATION_ENABLE`
= Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
## USB Endpoint Limitations
In order to provide services over USB, QMK has to use USB endpoints.
These are a finite resource: each microcontroller has only a certain number.
This limits what features can be enabled together.
If the available endpoints are exceeded, a build error is thrown.
The following features can require separate endpoints:
*`MOUSEKEY_ENABLE`
*`EXTRAKEY_ENABLE`
*`CONSOLE_ENABLE`
*`NKRO_ENABLE`
*`MIDI_ENABLE`
*`RAW_ENABLE`
*`VIRTSER_ENABLE`
In order to improve utilisation of the endpoints, the HID features can be combined to use a single endpoint.
By default, `MOUSEKEY`, `EXTRAKEY`, and `NKRO` are combined into a single endpoint.
The base keyboard functionality can also be combined into the endpoint,
by setting `KEYBOARD_SHARED_EP = yes`.
This frees up one more endpoint,
but it can prevent the keyboard working in some BIOSes,
as they do not implement Boot Keyboard protocol switching.
Combining the mouse also breaks Boot Mouse compatibility.
The mouse can be uncombined by setting `MOUSE_SHARED_EP = no` if this functionality is required.
👍🎉 First off, thanks for taking the time to read this and contribute! 🎉👍
@@ -9,9 +9,9 @@ Third-party contributions help us grow and improve QMK. We want to make the pull
* [General Guidelines](#general-guidelines)
* [What does the Code of Conduct mean for me?](#what-does-the-code-of-conduct-mean-for-me)
## I Don't Want To Read This Whole Thing I Just Have a Question!
## I Don't Want to Read This Whole Thing! I Just Have a Question!
If you'd like to ask questions about QMK you can do so on the [OLKB Subreddit](https://reddit.com/r/olkb) or on [Gitter](https://gitter.im/qmk/qmk_firmware).
If you'd like to ask questions about QMK you can do so on the [OLKB Subreddit](https://reddit.com/r/olkb) or on [Discord](https://discord.gg/Uq7gcHh).
Please keep these things in mind:
@@ -27,9 +27,9 @@ QMK is largely written in C, with specific features and parts written in C++. It
<!-- FIXME: We should include a list of resources for learning C here. -->
# Where can I go for help?
# Where Can I Go for Help?
If you need help you can [open an issue](https://github.com/qmk/qmk_firmware/issues) or [chat on gitter](http://gitter.im/QMK/qmk_firmware).
If you need help you can [open an issue](https://github.com/qmk/qmk_firmware/issues) or [chat on Discord](https://discord.gg/Uq7gcHh).
# How Do I Make a Contribution?
@@ -52,30 +52,70 @@ Never made an open source contribution before? Wondering how contributions work
14. Make changes to the pull request if the reviewing maintainer recommends them.
15. Celebrate your success after your pull request is merged!
# Coding conventions
# Coding Conventions
Most of our style is pretty easy to pick up on, but right now it's not entirely consistent. You should match the style of the code surrounding your change, but if that code is inconsistent or unclear use the following guidelines:
* We indent using two spaces (soft tabs)
* We use One True Brace Style
* We indent using four (4) spaces (soft tabs)
* We use a modified One True Brace Style
* Opening Brace: At the end of the same line as the statement that opens the block
* Closing Brace: Lined up with the first character of the statement that opens the block
* Else If: Place the closing brace at the beginning of the line and the next opening brace at the end of the same line.
* Optional Braces: Always include optional braces.
* Good: if (condition) { return false; }
* Bad: if (condition) return false;
* We use C style comments: /* */
* We encourage use of C style comments: `/* */`
* Think of them as a story describing the feature
* Use them liberally to explain why particular decisions were made.
* Do not write obvious comments
* If you not sure if a comment is obvious, go ahead and include it.
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
* If you are not sure which to prefer use the `#if defined(DEFINED)` form.
* Do not change existing code from one style to the other, except when moving to a multiple condition `#if`.
* Do not put whitespace between `#` and `if`.
* When deciding how (or if) to indent directives keep these points in mind:
* Readability is more important than consistency.
* Follow the file's existing style. If the file is mixed follow the style that makes sense for the section you are modifying.
* When choosing to indent you can follow the indention level of the surrounding C code, or preprocessor directives can have their own indent level. Choose the style that best communicates the intent of your code.
Here is an example for easy reference:
```c
/* Enums for foo */
enumfoo_state{
FOO_BAR,
FOO_BAZ,
};
/* Returns a value */
intfoo(void){
if(some_condition){
returnFOO_BAR;
}else{
return-1;
}
}
```
# Auto-formatting with clang-format
[Clang-format](https://clang.llvm.org/docs/ClangFormat.html) is part of LLVM and can automatically format your code for you, because ain't nobody got time to do it manually. We supply a configuration file for it that applies most of the coding conventions listed above. It will only change whitespace and newlines, so you will still have to remember to include optional braces yourself.
Use the [full LLVM installer](http://llvm.org/builds/) to get clang-format on Windows, or use `sudo apt install clang-format` on Ubuntu.
If you run it from the command-line, pass `-style=file` as an option and it will automatically find the .clang-format configuration file in the QMK root directory.
If you use VSCode, the standard C/C++ plugin supports clang-format, alternatively there is a [separate extension](https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat) for it.
Some things (like LAYOUT macros) are destroyed by clang-format, so either don't run it on those files, or wrap the sensitive code in `// clang-format off` and `// clang-format on`.
# General Guidelines
We have a few different types of changes in QMK, each requiring a different level of rigor. We'd like you to keep the following guidelines in mind no matter what type of change you're making.
* Separate PR's into logical units. For example, do not submit one PR covering two separate features, instead submit a separate PR for each feature.
* Separate PR's into logical units. For example, do not submit one PR covering two separate features, instead submit a separate PR for each feature.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Make sure your code change actually compiles.
* Keymaps: Make sure that `make keyboard:your_new_keymap` does not return an error
@@ -97,29 +137,48 @@ Documentation is one of the easiest ways to get started contributing to QMK. Fin
You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click "Suggest An Edit" at the top of each page on http://docs.qmk.fm/.
When providing code examples in your documentation, try to observe naming conventions used elsewhere in the docs. For example, standardizing enums as `my_layers` or `my_keycodes` for consistency:
```c
enummy_layers{
_FIRST_LAYER,
_SECOND_LAYER
};
enummy_keycodes{
FIRST_LAYER=SAFE_RANGE,
SECOND_LAYER
};
```
## Keymaps
Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.
* Write a `readme.md` using [the template](https://docs.qmk.fm/documentation_templates.html#).
* Write a `readme.md` using [the template](documentation_templates.md).
* All Keymap PR's are squashed, so if you care about how your commits are squashed you should do it yourself
* Do not lump features in with keymap PR's. Submit the feature first and then a second PR for the keymap.
* Do not include `Makefile`s in your keymap folder (they're no longer used)
* Update copyrights in file headers (look for `%YOUR_NAME%`)
## Keyboards
Keyboards are the raison d'être for QMK. Some keyboards are community maintained, while others are maintained by the people responsible for making a particular keyboard. The `readme.md` should tell you who maintains a particular keyboard. If you have questions relating to a particular keyboard you can [Open An Issue](https://github.com/qmk/qmk_firmware/issues) and tag the maintainer in your question.
We also ask that you follow these guidelines:
We also ask that you follow these guidelines:
* Write a `readme.md` using [the template](https://docs.qmk.fm/documentation_templates.html#).
* Write a `readme.md` using [the template](documentation_templates.md).
* Keep the number of commits reasonable or we will squash your PR
* Do not lump core features in with new keyboards. Submit the feature first and then submit a separate PR for the keyboard.
* Name `.c`/`.h` file after the immediate parent folder, eg `/keyboards/<kb1>/<kb2>/<kb2>.[ch]`
* Do not include `Makefile`s in your keyboard folder (they're no longer used)
* Update copyrights in file headers (look for `%YOUR_NAME%`)
## Quantum/TMK Core
Before you put a lot of work into building your new feature you should make sure you are implementing it in the best way. You can get a basic understanding of QMK by reading [Understaning QMK](understanding_qmk.html), which will take you on a tour of the QMK program flow. From here you should talk to us to get a sense of the best way to implement your idea. There are two main ways to do this:
Before you put a lot of work into building your new feature you should make sure you are implementing it in the best way. You can get a basic understanding of QMK by reading [Understanding QMK](understanding_qmk.md), which will take you on a tour of the QMK program flow. From here you should talk to us to get a sense of the best way to implement your idea. There are two main ways to do this:
* [Chat on Gitter](https://gitter.im/qmk/qmk_firmware)
* [Chat on Discord](https://discord.gg/Uq7gcHh)
* [Open an Issue](https://github.com/qmk/qmk_firmware/issues/new)
Feature and Bug Fix PR's affect all keyboards. We are also in the process of restructuring QMK. For this reason it is especially important for significant changes to be discussed before implementation has happened. If you open a PR without talking to us first please be prepared to do some significant rework if your choices do not mesh well with our planned direction.
@@ -131,17 +190,17 @@ Here are some things to keep in mind when working on your feature or bug fix.
* **Consider revisions and different chip-bases** - there are several keyboards that have revisions that allow for slightly different configurations, and even different chip-bases. Try to make a feature supported in ARM and AVR, or automatically disabled on platforms it doesn't work on.
* **Explain your feature** - Document it in `docs/`, either as a new file or as part of an existing file. If you don't document it other people won't be able to benefit from your hard work.
We also ask that you follow these guidelines:
We also ask that you follow these guidelines:
* Keep the number of commits reasonable or we will squash your PR
* Do not lump keyboards or keymaps in with core changes. Submit your core changes first.
* Write [Unit Tests](http://docs.qmk.fm/unit_testing.html) for your feature
* Write [Unit Tests](unit_testing.md) for your feature
* Follow the style of the file you are editing. If the style is unclear or there are mixed styles you should conform to the [coding conventions](#coding-conventions) above.
## Refactoring
To maintain a clear vision of how things are laid out in QMK we try to plan out refactors in-depth and have a collaborator make the changes. If you have an idea for refactoring, or suggestions, [open an issue](https://github.com/qmk/qmk_firmware/issues), we'd love to talk about how QMK can be improved.
# What does the Code of Conduct mean for me?
# What Does the Code of Conduct Mean for Me?
Our Code of Conduct means that you are responsible for treating everyone on the project with respect and courtesy regardless of their identity. If you are the victim of any inappropriate behavior or comments as described in our Code of Conduct, we are here for you and will do the best to ensure that the abuser is reprimanded appropriately, per our code.
Our [Code of Conduct](https://github.com/qmk/qmk_firmware/blob/master/CODE_OF_CONDUCT.md) means that you are responsible for treating everyone on the project with respect and courtesy regardless of their identity. If you are the victim of any inappropriate behavior or comments as described in our Code of Conduct, we are here for you and will do the best to ensure that the abuser is reprimanded appropriately, per our code.
For a lot of people a custom keyboard is about more than sending button presses to your computer. You want to be able to do things that are more complex than simple button presses and macros. QMK has hooks that allow you to inject code, override functionality, and otherwise customize how your keyboard behaves in different situations.
For a lot of people a custom keyboard is about more than sending button presses to your computer. You want to be able to do things that are more complex than simple button presses and macros. QMK has hooks that allow you to inject code, override functionality, and otherwise customize how your keyboard behaves in different situations.
This page does not assume any special knowledge about QMK, but reading [Understanding QMK](understanding_qmk.html) will help you understand what is going on at a more fundamental level.
This page does not assume any special knowledge about QMK, but reading [Understanding QMK](understanding_qmk.md) will help you understand what is going on at a more fundamental level.
## A Word on Core vs Keyboards vs Keymap
@@ -27,24 +27,24 @@ The first step to creating your own custom keycode(s) is to enumerate them. This
Here is an example of enumerating 2 keycodes. After adding this block to your `keymap.c` you will be able to use `FOO` and `BAR` inside your keymap.
```
```c
enummy_keycodes{
FOO=SAFE_RANGE,
BAR
};
```
## Programming The Behavior Of Any Keycode
## Programming the Behavior of Any Keycode
When you want to override the behavior of an existing key, or define the behavior for a new key, you should use the `process_record_kb()` and `process_record_user()` functions. These are called by QMK during key processing before the actual key event is handled. If these functions return `true` QMK will process the keycodes as usual. That can be handy for extending the functionality of a key rather than replacing it. If these functions return `false` QMK will skip the normal key handling, and it will be up you to send any key up or down events that are required.
When you want to override the behavior of an existing key, or define the behavior for a new key, you should use the `process_record_kb()` and `process_record_user()` functions. These are called by QMK during key processing before the actual key event is handled. If these functions return `true` QMK will process the keycodes as usual. That can be handy for extending the functionality of a key rather than replacing it. If these functions return `false` QMK will skip the normal key handling, and it will be up to you to send any key up or down events that are required.
These function are called every time a key is pressed or released.
### Example `process_record_user()` implementation
### Example `process_record_user()` Implementation
This example does two things. It defines the behavior for a custom keycode called `FOO`, and it supplements our Enter key by playing a tone whenever it is pressed.
Before a keyboard can be used the hardware must be initialized. QMK handles initialization of the keyboard matrix itself, but if you have other hardware like LED's or i²c controllers you will need to set up that hardware before it can be used.
Call this function to get the last received LED state. This is useful for reading the LED state outside `led_set_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
For convenience, you can use the `IS_HOST_LED_ON(led_name)` and `IS_HOST_LED_OFF(led_name)` macros instead of calling and checking `host_keyboard_leds()` directly.
### Example `matrix_init_kb()` implementation
## Setting Physical LED State
This example, at the keyboard level, sets up B1, B2, and B3 as LED pins.
Some keyboard implementations provide convenience methods for setting the state of the physical LEDs.
```
void matrix_init_kb(void) {
// Call the keymap level matrix init.
matrix_init_user();
### Ergodox Boards
The Ergodox implementations provide `ergodox_right_led_1`/`2`/`3_on`/`off()` to turn individual LEDs on or off, as well as `ergodox_right_led_on`/`off(uint8_t led)` to turn them on or off by their index.
In addition, it is possible to specify the brightness level of all LEDs with `ergodox_led_all_set(uint8_t n)`; of individual LEDs with `ergodox_right_led_1`/`2`/`3_set(uint8_t n)`; or by index with `ergodox_right_led_set(uint8_t led, uint8_t n)`.
Ergodox boards also define `LED_BRIGHTNESS_LO` for the lowest brightness and `LED_BRIGHTNESS_HI` for the highest brightness (which is the default).
# Keyboard Initialization Code
There are several steps in the keyboard initialization process. Depending on what you want to do, it will influence which function you should use.
These are the three main initialization functions, listed in the order that they're called.
*`keyboard_pre_init_*` - Happens before most anything is started. Good for hardware setup that you want running very early.
*`matrix_init_*` - Happens midway through the firmware's startup process. Hardware is initialized, but features may not be yet.
*`keyboard_post_init_*` - Happens at the end of the firmware's startup process. This is where you'd want to put "customization" code, for the most part.
!> For most people, the `keyboard_post_init_user` function is what you want to call. For instance, this is where you want to set up things for RGB Underglow.
## Keyboard Pre Initialization code
This runs very early during startup, even before the USB has been started.
Shortly after this, the matrix is initialized.
For most users, this shouldn't be used, as it's primarily for hardware oriented initialization.
However, if you have hardware stuff that you need initialized, this is the best place for it (such as initializing LED pins).
### Example `keyboard_pre_init_user()` Implementation
This example, at the keyboard level, sets up B0, B1, B2, B3, and B4 as LED pins.
This is called when the matrix is initialized, and after some of the hardware has been set up, but before many of the features have been initialized.
This is useful for setting up stuff that you may need elsewhere, but isn't hardware related nor is dependant on where it's started.
### `matrix_init_*` Function Documentation
* Keyboard/Revision: `void matrix_init_kb(void)`
* Keymap: `void matrix_init_user(void)`
## Keyboard Post Initialization code
This is ran as the very last task in the keyboard initialization process. This is useful if you want to make changes to certain features, as they should be initialized by this point.
### Example `keyboard_post_init_user()` Implementation
This example, running after everything else has initialized, sets up the rgb underglow configuration.
```c
voidkeyboard_post_init_user(void){
// Call the post init code.
rgblight_enable_noeeprom();// enables Rgb, without saving settings
rgblight_sethsv_noeeprom(180,255,255);// sets the color to teal/cyan without saving
rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING+3);// sets mode to Fast breathing without saving
Whenever possible you should customize your keyboard by using `process_record_*()` and hooking into events that way, to ensure that your code does not have a negative performance impact on your keyboard. However, in rare cases it is necessary to hook into the matrix scanning. Be extremely careful with the performance of code in these functions, as it will be called at least 10 times per second.
### Example `matrix_scan_*` implementation
### Example `matrix_scan_*` Implementation
This example has been deliberately omitted. You should understand enough about QMK internals to write this without an example before hooking into such a performance sensitive area. If you need help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) or [chat with us on gitter](https://gitter.im/qmk/qmk_firmware).
This example has been deliberately omitted. You should understand enough about QMK internals to write this without an example before hooking into such a performance sensitive area. If you need help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) or [chat with us on Discord](https://discord.gg/Uq7gcHh).
### `matrix_scan_*` Function documentation
### `matrix_scan_*` Function Documentation
* Keyboard/Revision: `void matrix_scan_kb(void)`
* Keymap: `void matrix_scan_user(void)`
This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
You should use this function if you need custom matrix scanning code. It can also be used for custom status output (such as LED's or a display) or other functionality that you want to trigger regularly even when the user isn't typing.
You should use this function if you need custom matrix scanning code. It can also be used for custom status output (such as LEDs or a display) or other functionality that you want to trigger regularly even when the user isn't typing.
# Keyboard Idling/Wake Code
If the board supports it, it can be "idled", by stopping a number of functions. A good example of this is RGB lights or backlights. This can save on power consumption, or may be better behavior for your keyboard.
This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system is board is idled and when it wakes up, respectively.
### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
```c
voidsuspend_power_down_user(void){
rgb_matrix_set_suspend_state(true);
}
voidsuspend_wakeup_init_user(void){
rgb_matrix_set_suspend_state(false);
}
```
### Keyboard suspend/wake Function Documentation
* Keyboard/Revision: `void suspend_power_down_kb(void)` and `void suspend_wakeup_init_user(void)`
* Keymap: `void suspend_power_down_kb(void)` and `void suspend_wakeup_init_user(void)`
# Layer Change Code
This runs code every time that the layers get changed. This can be useful for layer indication, or custom layer handling.
### Example `layer_state_set_*` Implementation
This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example
```c
uint32_tlayer_state_set_user(uint32_tstate){
switch(biton32(state)){
case_RAISE:
rgblight_setrgb(0x00,0x00,0xFF);
break;
case_LOWER:
rgblight_setrgb(0xFF,0x00,0x00);
break;
case_PLOVER:
rgblight_setrgb(0x00,0xFF,0x00);
break;
case_ADJUST:
rgblight_setrgb(0x7A,0x00,0xFF);
break;
default:// for any other layers, or the default layer
The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status)
# Persistent Configuration (EEPROM)
This allows you to configure persistent settings for your keyboard. These settings are stored in the EEPROM of your controller, and are retained even after power loss. The settings can be read with `eeconfig_read_kb` and `eeconfig_read_user`, and can be written to using `eeconfig_update_kb` and `eeconfig_update_user`. This is useful for features that you want to be able to toggle (like toggling rgb layer indication). Additionally, you can use `eeconfig_init_kb` and `eeconfig_init_user` to set the default values for the EEPROM.
The complicated part here, is that there are a bunch of ways that you can store and access data via EEPROM, and there is no "correct" way to do this. However, you only have a DWORD (4 bytes) for each function.
Keep in mind that EEPROM has a limited number of writes. While this is very high, it's not the only thing writing to the EEPROM, and if you write too often, you can potentially drastically shorten the life of your MCU.
* If you don't understand the example, then you may want to avoid using this feature, as it is rather complicated.
### Example Implementation
This is an example of how to add settings, and read and write it. We're using the user keymap for the example here. This is a complex function, and has a lot going on. In fact, it uses a lot of the above functions to work!
In your keymap.c file, add this to the top:
```c
typedefunion{
uint32_traw;
struct{
boolrgb_layer_change:1;
};
}user_config_t;
user_config_tuser_config;
```
This sets up a 32 bit structure that we can store settings with in memory, and write to the EEPROM. Using this removes the need to define variables, since they're defined in this structure. Remember that `bool` (boolean) values use 1 bit, `uint8_t` uses 8 bits, `uint16_t` uses up 16 bits. You can mix and match, but changing the order can cause issues, as it will change the values that are read and written.
We're using `rgb_layer_change`, for the `layer_state_set_*` function, and use `keyboard_post_init_user` and `process_record_user` to configure everything.
Now, using the `keyboard_post_init_user` code above, you want to add `eeconfig_read_user()` to it, to populate the structure you've just created. And you can then immediately use this structure to control functionality in your keymap. And It should look like:
```c
voidkeyboard_post_init_user(void){
// Call the keymap level matrix init.
// Read the user config from EEPROM
user_config.raw=eeconfig_read_user();
// Set default layer, if enabled
if(user_config.rgb_layer_change){
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom_cyan();
rgblight_mode_noeeprom(1);
}
}
```
The above function will use the EEPROM config immediately after reading it, to set the default layer's RGB color. The "raw" value of it is converted in a usable structure based on the "union" that you created above.
This will cause the RGB underglow to be changed ONLY if the value was enabled. Now to configure this value, create a new keycode for `process_record_user` called `RGB_LYR`. Additionally, we want to make sure that if you use the normal RGB codes, that it turns off Using the example above, make it look this:
returnfalse;// Skip all further processing of this key
caseKC_ENTER:
// Play a tone when enter is pressed
if(record->event.pressed){
PLAY_NOTE_ARRAY(tone_qwerty);
}
returntrue;// Let QMK send the enter press/release events
caseRGB_LYR:// This allows me to use underglow as layer indication, or as normal
if(record->event.pressed){
user_config.rgb_layer_change^=1;// Toggles the status
eeconfig_update_user(user_config.raw);// Writes the new status to EEPROM
if(user_config.rgb_layer_change){// if layer state indication is enabled,
layer_state_set(layer_state);// then immediately update the layer color
}
}
returnfalse;break;
caseRGB_MODE_FORWARD...RGB_MODE_GRADIENT:// For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
if(record->event.pressed){//This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
if(user_config.rgb_layer_change){// only if this is enabled
user_config.rgb_layer_change=false;// disable it, and
eeconfig_update_user(user_config.raw);// write the setings to EEPROM
}
}
returntrue;break;
default:
returntrue;// Process all other keycodes normally
}
}
```
And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
```c
voideeconfig_init_user(void){// EEPROM is getting reset!
user_config.raw=0;
user_config.rgb_layer_change=true;// We want this enabled by default
eeconfig_update_user(user_config.raw);// Write default value to EEPROM now
// use the non noeeprom versions, to write these values to EEPROM too
rgblight_enable();// Enable RGB by default
rgblight_sethsv_cyan();// Set it to CYAN by default
rgblight_mode(1);// set to solid by default
}
```
And you're done. The RGB layer indication will only work if you want it to. And it will be saved, even after unplugging the board. And if you use any of the RGB codes, it will disable the layer indication, so that it stays on the mode and color that you set it to.
### 'EECONFIG' Function Documentation
* Keyboard/Revision: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)` and `void eeconfig_update_kb(uint32_t val)`
* Keymap: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)` and `void eeconfig_update_user(uint32_t val)`
The `val` is the value of the data that you want to write to EEPROM. And the `eeconfig_read_*` function return a 32 bit (DWORD) value from the EEPROM.
# Custom Tapping Term
By default, the tapping term is defined globally, and is not configurable by key. For most users, this is perfectly fine. But in come cases, dual function keys would be greatly improved by different timeouts than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable `TAPPING_TERM`.
To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
## Example `get_tapping_term` Implementation
To change the `TAPPING TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file:
```c
uint16_tget_tapping_term(uint16_tkeycode){
switch(keycode){
caseSFT_T(KC_SPC):
returnTAPPING_TERM+1250;
caseLT(1,KC_GRV):
return130;
default:
returnTAPPING_TERM;
}
}
```
### `get_tapping_term` Function Documentation
Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only a user level function is useful here, so no need to mark it as such.
@@ -4,7 +4,7 @@ This page exists to document best practices when writing documentation for QMK.
# Page Opening
Your documentation page should generally start with an H1 heading, followed by a 1 paragrah description of what the user will find on this page. Keep in mind that this heading and paragraph will sit next to the Table of Contents, so keep the heading short and avoid long strings with no whitespace.
Your documentation page should generally start with an H1 heading, followed by a 1 paragraph description of what the user will find on this page. Keep in mind that this heading and paragraph will sit next to the Table of Contents, so keep the heading short and avoid long strings with no whitespace.
Example:
@@ -22,63 +22,30 @@ Your page should generally have multiple "H1" headings. Only H1 and H2 headings
You can have styled hint blocks drawn around text to draw attention to it.
```
{% hint style='info' %}
This uses `hint style='info'`
{% endhint %}
```
### Examples:
{% hint style='info' %}
This uses `hint style='info'`
{% endhint %}
{% hint style='tip' %}
This uses `hint style='tip'`
{% endhint %}
{% hint style='danger' %}
This uses `hint style='danger'`
{% endhint %}
{% hint style='working' %}
This uses `hint style='working'`
{% endhint %}
# Styled Terminal Blocks
You can present styled terminal blocks by including special tokens inside your text block.
You can add some colors. What about a warning message?
**[warning [WARNING] The color depends on the theme. Could look normal too]
What about an error message?
**[error [ERROR] This is not the error you are looking for]
?> This is a helpful tip.
```
Renders as:
?> This is a helpful tip.
# Documenting Features
If you create a new feature for QMK, create a documentation page for it. It doesn't have to be very long, a few sentances describing your feature and a table listing any relevant keycodes is enough. Here is a basic template:
If you create a new feature for QMK, create a documentation page for it. It doesn't have to be very long, a few sentences describing your feature and a table listing any relevant keycodes is enough. Here is a basic template:
```markdown
# My Cool Feature
@@ -94,4 +61,4 @@ This page describes my cool feature. You can use my cool feature to make coffee
|KC_SUGAR||Order Sugar|
```
Place your documentation into `docs/feature_<my_cool_feature>.md`, and add that file to the appropriate place in `docs/_summary.md`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page.
Place your documentation into `docs/feature_<my_cool_feature>.md`, and add that file to the appropriate place in `docs/_sidebar.md`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page.
@@ -36,7 +36,7 @@ Make example for this keyboard (after setting up your build environment):
make planck/rev4: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).
```
There needs to be two spaces at the end of the `Keyboard Maintainer` and `Hardware Supported` lines for it to render correctly with Markdown.
# Dynamic macros: record and replay macros in runtime
QMK supports temporary macros created on the fly. We call these Dynamic Macros. They are defined by the user from the keyboard and are lost when the keyboard is unplugged or otherwise rebooted.
You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
To enable them, first add a new element to the `planck_keycodes` enum — `DYNAMIC_MACRO_RANGE`:
```c
enumplanck_keycodes{
QWERTY=SAFE_RANGE,
COLEMAK,
DVORAK,
PLOVER,
LOWER,
RAISE,
BACKLIT,
EXT_PLV,
DYNAMIC_MACRO_RANGE,
};
```
It must be the last element because `dynamic_macros.h` will add some more keycodes after it.
Below it, include the `dynamic_macro.h` header:
```c
#include"dynamic_macro.h"`
```
Add the following keys to your keymap:
*`DYN_REC_START1` — start recording the macro 1,
*`DYN_REC_START2` — start recording the macro 2,
*`DYN_MACRO_PLAY1` — replay the macro 1,
*`DYN_MACRO_PLAY2` — replay the macro 2,
*`DYN_REC_STOP` — finish the macro that is currently being recorded.
Add the following code to the very beginning of your `process_record_user()` function:
That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again.
For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above:
If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header).
For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
[Eclipse](https://en.wikipedia.org/wiki/Eclipse_(software)) is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
Using an IDE such as Eclipse provides many advantages over a plain text editor, such as:
* intelligent code completion
* convenient navigation in the code
* refactoring tools
* build automation (no need for the command-line)
* a GUI for GIT
* static code analysis
* many other tools such as debugging, code formatting, showing call hierarchies etc.
The purpose of the is page is to document how to set-up Eclipse for developing AVR software, and working on the QMK code base.
Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
# Prerequisites
## Build environment
Before starting, you must have followed the [Getting Started](home.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
## Java
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
# Install Eclipse and its plugins
Eclipse comes in [several flavours](http://www.eclipse.org/downloads/eclipse-packages/) depending on the target usage that you will have. There is no package comprising the AVR stack, so we will need to start from Eclipse CDT (C/C++ Development Tooling) and install the necessary plugins.
## Download and install Eclipse CDT
If you already have Eclipse CDT on your system, you can skip this step. However it is advised to keep it up-to-date for better support.
If you have another Eclipse package installed, it is normally possible to [install the CDT plugin over it](https://eclipse.org/cdt/downloads.php). However it is probably better to reinstall it from scratch to keep it light and avoid the clutter of tools that you don't need for the projects you will be working on.
Installation is very simple: follow the [5 Steps to Install Eclipse](https://eclipse.org/downloads/eclipse-packages/?show_instructions=TRUE), and choose **Eclipse IDE for C/C++ Developers** at Step 3.
Alternatively, you can also directly [download Eclipse IDE for C/C++ Developers](http://www.eclipse.org/downloads/eclipse-packages/) ([direct link to current version](http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neonr)) and extract the package to the location of your choice (this creates an `eclipse` folder).
## First Launch
When installation is complete, click the <kbd>Launch</kbd> button. (If you extracted the package manually, open the Eclipse installation folder and double-click the `eclipse` executable)
When you are prompted with the Workspace Selector, select a directory that will hold Eclipse metadata and usually your projects. **Do not select the `qmk_firmware` directory**, this will be the project directory. Select the parent folder instead, or another (preferably empty) folder of your choice (the default is fine if you do not use it yet).
Once started, click the <kbd>Workbench</kbd> button at the top right to switch to the workbench view (there is a also checkbox at the bottom to skip the welcome screen at startup).
## Install the necessary plugins
Note: you do not need to restart Eclipse after installing each plugin. Simply restart once all plugins are installed.
This is the most important plugin as it will allow Eclipse to _understand_ AVR C code. Follow [the instructions for using the update site](http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download#Update_Site), and agree with the security warning for unsigned content.
### [ANSI Escape in Console](https://marketplace.eclipse.org/content/ansi-escape-console)
This plugin is necessary to properly display the colored build output generated by the QMK makefile.
1. Open <kbd><kbd>Help</kbd> > <kbd>Eclipse Marketplace…</kbd></kbd>
2. Search for _ANSI Escape in Console_
3. Click the <samp>Install</samp> button of the plugin
4. Follow the instructions and agree again with the security warning for unsigned content.
Once both plugins are installed, restart Eclipse as prompted.
* Select the directory where you cloned the repository as _Existing Code Location_;
* (Optional) Give a different name to the project¹, e.g. _QMK_ or _Quantum_;
* Select the _AVR-GCC Toolchain_;
* Keep the rest as-is and click <kbd>Finish</kbd>

3. The project will now be loaded and indexed. Its files can be browsed easily through the _Project Explorer_ on the left.
¹ There might be issues for importing the project with a custom name. If it does not work properly, try leaving the default project name (i.e. the name of the directory, probably `qmk_firmware`).
## Build your keyboard
We will now configure a make target that cleans the project and builds the keymap of your choice.
1. On the right side of the screen, select the <kbd>Make Target</kbd> tab
2. Expand the folder structure to the keyboard of your choice, e.g. `qmk_firmware/keyboards/ergodox`
3. Right-click on the keyboard folder and select <kbd>New…</kbd> (or select the folder and click the <kbd>New Make Target</kbd> icon above the tree)
4. Choose a name for your build target, e.g. _clean \<your keymap\>_
5. Make Target: this is the arguments that you give to `make` when building from the command line. If your target name does not match these arguments, uncheck <kbd>Same as target name</kbd> and input the correct arguments, e.g. `clean <your keymap>`
6. Leave the other options checked and click <kbd>OK</kbd>. Your make target will now appear under the selected keyboard.
7. (Optional) Toggle the <kbd>Hide Empty Folders</kbd> icon button above the targets tree to only show your build target.
8. Double-click the build target you created to trigger a build.
9. Select the <kbd>Console</kbd> view at the bottom to view the running build.
This page covers questions about building QMK. If you have not yet you should read the [Build Environment Setup](getting_started_build_tools.md) and [Make Instructions](make_instructions.md) guides.
This page covers questions about building QMK. If you haven't yet done so, you should read the [Build Environment Setup](getting_started_build_tools.md) and [Make Instructions](getting_started_make_guide.md) guides.
## Can't program on Linux
You will need proper permission to operate a device. For Linux users see udev rules below. Easy way is to use `sudo` command, if you are not familiar with this command check its manual with `man sudo` or this page on line.
## Can't Program on Linux
You will need proper permissions to operate a device. For Linux users, see the instructions regarding `udev` rules, below. If you have issues with `udev`, a work-around is to use the `sudo` command. If you are not familiar with this command, check its manual with `man sudo` or [see this webpage](https://linux.die.net/man/8/sudo).
An example of using `sudo`, when your controller is ATMega32u4:
In short when your controller is ATMega32u4,
$ sudo dfu-programmer atmega32u4 erase --force
$ sudo dfu-programmer atmega32u4 flash your.hex
$ sudo dfu-programmer atmega32u4 reset
or just
or just:
$ sudo make <keyboard>:<keymap>:dfu
But to run `make` with root privilege is not good idea. Use former method if possible.
Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
## WINAVR is obsolete
It is no longer recommended and may cause some problem.
See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
## USB VID and PID
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
Most boards in QMK use `0xFEED` as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID.
Also see this.
https://github.com/tmk/tmk_keyboard/issues/150
You can buy a really unique VID:PID here. I don't think you need this for personal use.
On Linux you need proper privilege to access device file of MCU, you'll have to use `sudo` when flashing firmware. You can circumvent this with placing these files in `/etc/udev/rules.d/`.
### Linux `udev` Rules
On Linux, you'll need proper privileges to access the MCU. You can either use
`sudo` when flashing firmware, or place these files in `/etc/udev/rules.d/`.
### Serial device is not detected in bootloader mode on Linux
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
## Unknown Device for DFU Bootloader
If you're using Windows to flash your keyboard, and you are running into issues, check the Device Manager. If you see an "Unknown Device" when the keyboard is in "bootloader mode", then you may have a driver issue.
Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue.
If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUSB` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again. If that doesn't work, try all of the options, until one works.
?> There isn't a best option for which driver should be used here. Some options work better on some systems than others. libUSB and WinUSB seem to be the best options here.
If the bootloader doesn't show up in the list for devices, you may need to enable the "List all devices" option in the `Options` menu, and then find the bootloader in question.
## Cortex: cstddef: No such file or directory
## WINAVR is Obsolete
It is no longer recommended and may cause some problem.
See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
## USB VID and PID
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
Most boards in QMK use `0xFEED` as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID.
Also see this.
https://github.com/tmk/tmk_keyboard/issues/150
You can buy a really unique VID:PID here. I don't think you need this for personal use.
This is an issue with updating on brew, causing symlinks that avr-gcc depend on getting mangled.
The solution is to remove and reinstall all affected modules.
```
brew rm avr-gcc
brew rm dfu-programmer
brew rm dfu-util
brew rm gcc-arm-none-eabi
brew rm avrdude
brew install avr-gcc
brew install dfu-programmer
brew install dfu-util
brew install gcc-arm-none-eabi
brew install avrdude
```
### avr-gcc 8.1 and LUFA
If you updated your avr-gcc to above 7 you may see errors involving LUFA. For example:
`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
For now, you need to rollback avr-gcc to 7 in brew.
```
brew uninstall --force avr-gcc
brew install avr-gcc@7
brew link --force avr-gcc@7
```
### I just flashed my keyboard and it does nothing/keypresses don't register - it's also ARM (rev6 planck, clueboard 60, hs60v2, etc...) (Feb 2019)
Due to how EEPROM works on ARM based chips, saved settings may no longer be valid. This affects the default layers, and *may*, under certain circumstances we are still figuring out, make the keyboard unusable. Resetting the EEPROM will correct this.
[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) can be used to force an eeprom reset. After flashing this image, flash your normal firmware again which should restore your keyboard to _normal_ working order.
If bootmagic is enabled in any form, you should be able to do this too (see [Bootmagic docs](feature_bootmagic.md) and keyboard info for specifics on how to do this).
- DFU tools do /not/ allow you to write into the bootloader (unless
you throw in extra fruitsalad of options), so there is little risk
you throw in extra fruitsalad of options), so there is little risk
there.
- EEPROM has around a 100000 write cycle. You shouldn't rewrite the
firmware repeatedly and continually; that'll burn the EEPROM
eventually.
## NKRO Doesn't work
First you have to compile frimware with this build option `NKRO_ENABLE` in **Makefile**.
First you have to compile firmware with this build option `NKRO_ENABLE` in **Makefile**.
Try `Magic`**N** command(`LShift+RShift+N` by default) when **NKRO** still doesn't work. You can use this command to toggle between **NKRO** and **6KRO** mode temporarily. In some situations **NKRO** doesn't work you need to switch to **6KRO** mode, in particular when you are in BIOS.
If your firmware built with `BOOTMAGIC_ENABLE` you need to turn its switch on by `BootMagic`**N** command(`Space+N` by default). This setting is stored in EEPROM and keeped over power cycles.
If your firmware built with `BOOTMAGIC_ENABLE` you need to turn its switch on by `BootMagic`**N** command(`Space+N` by default). This setting is stored in EEPROM and kept over power cycles.
Use `1UL<<16` instead of `1<<16` in `read_cols()` in [matrix.h] when your columns goes beyond 16.
In C `1` means one of [int] type which is [16bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`.
In C `1` means one of [int] type which is [16bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`.
If you are using a TeensyUSB, there is a [known bug](https://github.com/qmk/qmk_firmware/issues/164) in which the hardware reset button prevents the RESET key from working. Unplugging the keyboard and plugging it back in should resolve the problem.
## Special Extra key doesn't work(System, Audio control keys)
## Special Extra Key Doesn't Work(System, Audio Control Keys)
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
```
EXTRAKEY_ENABLE = yes # Audio control and System control
```
## Wakeup from sleep doesn't work
## Wakeup from Sleep Doesn't Work
In Windows check `Allow this device to wake the computer` setting in Power **Management property** tab of **Device Manager**. Also check BIOS setting.
@@ -180,11 +181,11 @@ Pressing any key during sleep should wake host.
Arduino leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
Arduino Leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
## Using PF4-7 pins of USB AVR?
You need to set JTD bit of MCUCR yourself to use PF4-7 as GPIO. Those pins are configured to serve JTAG function by default. MCUs like ATMega*U* or AT90USB* are affeteced with this.
## Using PF4-7 Pins of USB AVR?
You need to set JTD bit of MCUCR yourself to use PF4-7 as GPIO. Those pins are configured to serve JTAG function by default. MCUs like ATMega*U* or AT90USB* are affected with this.
If you are using Teensy this isn't needed. Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function.
## Problem on BIOS(UEFI)/Resume(Sleep&Wake)/Power cycles
## Problem on BIOS(UEFI)/Resume(Sleep & Wake)/Power Cycles
Some people reported their keyboard stops working on BIOS and/or after resume(power cycles).
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
[QMK](https://github.com/qmk), short for Quantum Mechanical Keyboard, is a group of people building tools for custom keyboards. We started with the [QMK firmware](https://github.com/qmk/qmk_firmware), a heavily modified fork of [TMK](https://github.com/tmk/tmk_keyboard).
### Why the name Quantum?
### Why the Name Quantum?
<!-- FIXME -->
## What Differences Are There Between QMK and TMK?
TMK was originally designed and implemented by [Jun Wako](https://github.com/tmk). QMK started as [Jack Humbert's](https://github.com/jackhumbert) fork of TMK for the Planck. After a while Jack's fork had diverged quite a bit from TMK, and in 2015 Jack decided to rename his fork to QMK.
TMK was originally designed and implemented by [Jun Wako](https://github.com/tmk). QMK started as [Jack Humbert](https://github.com/jackhumbert)'s fork of TMK for the Planck. After a while Jack's fork had diverged quite a bit from TMK, and in 2015 Jack decided to rename his fork to QMK.
From a technical standpoint QMK builds upon TMK by adding several new features. Most notably QMK has expanded the number of available keycodes and uses these to implement advanced features like `S()`, `LCTL()`, and `MO()`. You can see a complete list of these keycodes in [Keycodes](keycodes.md).
From a project and community management standpoint TMK maintains all the officially supported keyboards by himself, with a bit of community support. Separate community maintained forks exist or can be created for other keyboards. Only a few keymaps are provided by default, so users typically don't share keymaps with each other. QMK encourages sharing of both keyboards and keymaps through a centrally managed repository, accepting all pull requests that follow the quality standards. These are mostly community maintained, but the QMK team also helps when necessary.
Both approaches have their merits and their drawbacks, and code flows freely between TMK and QMK when it makes sense.
@@ -7,37 +7,56 @@ See [Keycodes](keycodes.md) for an index of keycodes available to you. These lin
Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
## `KC_SYSREQ` isn't working
## What Are the Default Keycodes?
There are 3 standard keyboard layouts in use around the world- ANSI, ISO, and JIS. North America primarily uses ANSI, Europe and Africa primarily use ISO, and Japan uses JIS. Regions not mentioned typically use either ANSI or ISO. The keycodes corresponding to these layouts are shown here:
<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/bf431647d1001cff5eff20ae55621e9a -->
QMK has two features, Bootmagic and Command, which allow you to change the behavior of your keyboard on the fly. This includes, but is not limited to, swapping Ctrl/Caps, disabling Gui, swapping Alt/Gui, swapping Backspace/Backslash, disabling all keys, and other behavioral modifications.
As a quick fix try holding down `Space`+`Backspace` while you plug in your keyboard. This will reset the stored settings on your keyboard, returning those keys to normal operation. If that doesn't work look here:
* [Bootmagic](feature_bootmagic.md)
* [Command](feature_command.md)
## The Menu Key Isn't Working
The key found on most modern keyboards that is located between `KC_RGUI` and `KC_RCTL` is actually called `KC_APP`. This is because when that key was invented there was already a key named `MENU` in the relevant standards, so MS chose to call that the `APP` key.
## `KC_SYSREQ` Isn't Working
Use keycode for Print Screen(`KC_PSCREEN` or `KC_PSCR`) instead of `KC_SYSREQ`. Key combination of 'Alt + Print Screen' is recognized as 'System request'.
See [issue #168](https://github.com/tmk/tmk_keyboard/issues/168) and
- http://en.wikipedia.org/wiki/Magic_SysRq_key
- http://en.wikipedia.org/wiki/System_request
* http://en.wikipedia.org/wiki/Magic_SysRq_key
* http://en.wikipedia.org/wiki/System_request
## Power key doesn't work
Use `KC_PWR` instead of `KC_POWER` or vice versa.
-`KC_PWR` works with Windows and Linux, not with OSX.
-`KC_POWER` works with OSX and Linux, not with Windows.
## Power Keys Aren't Working
More info: http://geekhack.org/index.php?topic=14290.msg1327264#msg1327264
Somewhat confusingly, there are two "Power" keycodes in QMK: `KC_POWER` in the Keyboard/Keypad HID usage page, and `KC_SYSTEM_POWER` (or `KC_PWR`) in the Consumer page.
## Oneshot modifier
Solves my personal 'the' problem. I often got 'the' or 'THe' wrongly instead of 'The'. Oneshot Shift mitgates this for me.
The former is only recognized on macOS, while the latter, `KC_SLEP` and `KC_WAKE` are supported by all three major operating systems, so it is recommended to use those instead. Under Windows, these keys take effect immediately, however on macOS they must be held down until a dialog appears.
## One Shot Modifier
Solves my personal 'the' problem. I often got 'the' or 'THe' wrongly instead of 'The'. One Shot Shift mitigates this for me.
https://github.com/tmk/tmk_keyboard/issues/67
## Modifier/Layer stuck
## Modifier/Layer Stuck
Modifier keys or layers can be stuck unless layer switching is configured properly.
For Modifier keys and layer actions you have to place `KC_TRANS` on same position of destination layer to unregister the modifier key or return to previous layer on release event.
This feature is for *mechanical lock switch* like [this Alps one](http://deskthority.net/wiki/Alps_SKCL_Lock). You can enable it by adding this to your `config.h`:
```
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
@@ -47,7 +66,7 @@ After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in y
Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
## Input special charactors other than ASCII like Cédille 'Ç'
## Input Special Characters Other Than ASCII like Cédille 'Ç'
NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
See this post for example **MACRO** code.
@@ -55,35 +74,35 @@ See this post for example **MACRO** code.
Unlike most Fn keys, the one on Apple keyboards actually has its own keycode... sort of. It takes the place of the sixth keycode in a basic 6KRO HID report -- so an Apple keyboard is in fact only 5KRO.
It is technically possible to get QMK to send this key. However, doing so requires modification of the report format to add the state of the Fn key.
Even worse, it is not recognized unless the keyboard's VID and PID match that of a real Apple keyboard. The legal issues that official QMK support for this feature may create mean it is unlikely to happen.
See [this issue](https://github.com/qmk/qmk_firmware/issues/2179) for detailed information.
## Apple/Mac keyboard Fn
Not supported.
Apple/Mac keyboard sends keycode for Fn unlike most of other keyboards.
I think you can send Apple Fn key using Apple venter specific Page 0xff01 and usage 0x0003. But you have to change HID Report Descriptor for this, of course.
Japanese JIS keyboard specific keys like `無変換(Muhenkan)`, `変換(Henkan)`, `ひらがな(hiragana)` are not recognized on OSX. You can use **Seil** to enable those keys, try following options.
* Enable NFER Key on PC keyboard
@@ -105,23 +124,21 @@ Japanese JIS keyboard specific keys like `無変換(Muhenkan)`, `変換(Henkan)`
https://pqrs.org/osx/karabiner/seil.html
## RN-42 Bluetooth doesn't work with Karabiner
## RN-42 Bluetooth Doesn't Work with Karabiner
Karabiner - Keymapping tool on Mac OSX - ignores inputs from RN-42 module by default. You have to enable this option to make Karabiner working with your keyboard.
Use `GRAVE_ESC` or `KC_GESC` in your keymap. `GUI`+`GRAVE_ESC` results in `` ` `` and `SHIFT`+`GRAVE_ESC` results in `~`.
See the [Grave Escape](feature_grave_esc.md) feature.
Note that this will break the CTRL+SHIFT+ESC shortcut to the Windows task manager. Use `#define GRAVE_ESC_CTRL_OVERRIDE` in your `config.h` to get the shortcut back. With this option, `ESC_GRAVE` results in `ESC` if `CTRL` is held, even if `SHIFT` or `GUI` are also held.
## Arrow on Right Modifier keys with Dual-Role
This turns right modifer keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
## Arrow on Right Modifier Keys with Dual-Role
This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
```
#include "keymap_common.h"
@@ -134,13 +151,13 @@ This turns right modifer keys into arrow keys when the keys are tapped while sti
@@ -172,18 +189,18 @@ It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mappin
Not sure what keycode Eject is on genuine Apple keyboard actually. HHKB uses `F20` for Eject key(`Fn+f`) on Mac mode but this is not same as Apple Eject keycode probably.
## What's weak_mods and real_mods in action_util.c
## What's `weak_mods` and `real_mods` in `action_util.c`
___TO BE IMPROVED___
real_mods is intended to retains state of real/physical modifier key state, while
weak_mods retains state of virtual or temprary modifiers which should not affect state real modifier key.
weak_mods retains state of virtual or temporary modifiers which should not affect state real modifier key.
Let's say you hold down physical left shift key and type ACTION_MODS_KEY(LSHIFT, KC_A),
Let's say you hold down physical left shift key and type ACTION_MODS_KEY(LSHIFT, KC_A),
with weak_mods,
* (1) hold down left shift: real_mods |= MOD_BIT(LSHIFT)
Your keymap can include keycodes that are more advanced than normal, for example keys that switch layers or send modifiers when held, but send regular keycodes when tapped. This page documents the functions that are available to you.
## Assigning Custom Names
People often define custom names using `#define`. For example:
```c
#define FN_CAPS LT(_FL, KC_CAPSLOCK)
#define ALT_TAB LALT(KC_TAB)
```
This will allow you to use `FN_CAPS` and `ALT_TAB` in your keymap, keeping it more readable.
## Caveats
Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
# Switching and Toggling Layers
These functions allow you to activate layers in various ways. Note that layers are not generally independent layouts -- multiple layers can be activated at once, and it's typical for layers to use `KC_TRNS` to allow keypresses to pass through to lower layers. For a detailed explanation of layers, see [Keymap Overview](keymap.md#keymap-and-layers). When using momentary layer switching with MO(), LM(), TT(), or LT(), make sure to leave the key on the above layers transparent or it may not work as intended.
*`DF(layer)` - switches the default layer. The default layer is the always-active base layer that other layers stack on top of. See below for more about the default layer. This might be used to switch from QWERTY to Dvorak layout. (Note that this is a temporary switch that only persists until the keyboard loses power. To modify the default layer in a persistent way requires deeper customization, such as calling the `set_single_persistent_default_layer` function inside of [process_record_user](custom_quantum_functions.md#programming-the-behavior-of-any-keycode).)
*`MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated.
*`LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers: `MOD_LCTL`, `MOD_LSFT`, `MOD_LALT`, `MOD_LGUI` (note the use of `MOD_` constants instead of `KC_`). These modifiers can be combined using bitwise OR, e.g. `LM(_RAISE, MOD_LCTL | MOD_LALT)`.
*`LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. Only supports layers 0-15.
*`OSL(layer)` - momentarily activates *layer* until the next key is pressed. See [One Shot Keys](#one-shot-keys) for details and additional functionality.
*`TG(layer)` - toggles *layer*, activating it if it's inactive and vice versa
*`TO(layer)` - activates *layer* and de-activates all other layers (except your default layer). This function is special, because instead of just adding/removing one layer to your active layer stack, it will completely replace your current active layers, uniquely allowing you to replace higher layers with a lower one. This is activated on keydown (as soon as the key is pressed).
*`TT(layer)` - Layer Tap-Toggle. If you hold the key down, *layer* is activated, and then is de-activated when you let go (like `MO`). If you repeatedly tap it, the layer will be toggled on or off (like `TG`). It needs 5 taps by default, but you can change this by defining `TAPPING_TOGGLE` -- for example, `#define TAPPING_TOGGLE 2` to toggle on just two taps.
# Working with Layers
Care must be taken when switching layers, it's possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems.
## Beginners
If you are just getting started with QMK you will want to keep everything simple. Follow these guidelines when setting up your layers:
* Setup layer 0 as your default, "base" layer. This is your normal typing layer, and could be whatever layout you want (qwerty, dvorak, colemak, etc.). It's important to set this as the lowest layer since it will typically have most or all of the keyboard's keys defined, so would block other layers from having any effect if it were above them (i.e., had a higher layer number).
* Arrange your layers in a "tree" layout, with layer 0 as the root. Do not try to enter the same layer from more than one other layer.
* In a layer's keymap, only reference higher-numbered layers. Because layers are processed from the highest-numbered (topmost) active layer down, modifying the state of lower layers can be tricky and error-prone.
## Intermediate Users
Sometimes you need more than one base layer. For example, if you want to switch between QWERTY and Dvorak, switch between layouts for different countries, or switch your layout for different videogames. Your base layers should always be the lowest numbered layers. When you have multiple base layers you should always treat them as mutually exclusive. When one base layer is on the others are off.
## Advanced Users
Once you have a good feel for how layers work and what you can do, you can get more creative. The rules listed in the beginner section will help you be successful by avoiding some of the tricker details but they can be constraining, especially for ultra-compact keyboard users. Understanding how layers work will allow you to use them in more advanced ways.
Layers stack on top of each other in numerical order. When determining what a keypress does, QMK scans the layers from the top down, stopping when it reaches the first active layer that is not set to `KC_TRNS`. As a result if you activate a layer that is numerically lower than your current layer, and your current layer (or another layer that is active and higher than your target layer) has something other than `KC_TRNS`, that is the key that will be sent, not the key on the layer you just activated. This is the cause of most people's "why doesn't my layer get switched" problem.
Sometimes, you might want to switch between layers in a macro or as part of a tap dance routine. `layer_on` activates a layer, and `layer_off` deactivates it. More layer-related functions can be found in [action_layer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_layer.h).
# Modifier Keys
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.
|`LCTL(kc)`|`C(kc)` |Hold Left Control and press `kc` |
|`LSFT(kc)`|`S(kc)` |Hold Left Shift and press `kc` |
|`LALT(kc)`|`A(kc)` |Hold Left Alt and press `kc` |
|`LGUI(kc)`|`G(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)`|`ALGR(kc)` |Hold Right Alt and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)` |Hold Right GUI 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` |
|`LCAG(kc)`| |Hold Left Control, Alt and GUI and press `kc` |
|`MEH(kc)` | |Hold Left Control, Shift and Alt and press `kc` |
|`HYPR(kc)`| |Hold Left Control, Shift, Alt and GUI and press `kc`|
You can also chain them, for example `LCTL(LALT(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
# 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.
The modifiers this keycode and `OSM()` accept are prefixed with `MOD_`, not `KC_`:
|`LCTL_T(kc)`|`CTL_T(kc)` |Left Control when held, `kc` when tapped |
|`LSFT_T(kc)`|`SFT_T(kc)` |Left Shift when held, `kc` when tapped |
|`LALT_T(kc)`|`ALT_T(kc)` |Left Alt when held, `kc` when tapped |
|`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|Left GUI when held, `kc` when tapped |
|`RCTL_T(kc)`| |Right Control when held, `kc` when tapped |
|`RSFT_T(kc)`| |Right Shift when held, `kc` when tapped |
|`RALT_T(kc)`|`ALGR_T(kc)` |Right Alt when held, `kc` when tapped |
|`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |Right GUI when held, `kc` when tapped |
|`SGUI_T(kc)`|`SCMD_T(kc)`, `SWIN_T(kc)` |Left Shift and GUI when held, `kc` when tapped |
|`LCA_T(kc)` | |Left Control and Alt when held, `kc` when tapped |
|`LCAG_T(kc)`| |Left Control, Alt and GUI when held, `kc` when tapped |
|`RCAG_T(kc)`| |Right Control, Alt and GUI when held, `kc` when tapped |
|`C_S_T(kc)` | |Left Control and Shift when held, `kc` when tapped |
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped|
|`HYPR_T(kc)`|`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
## Caveats
Unfortunately, these keycodes cannot be used in Mod-Taps or Layer-Taps, since any modifiers specified in the keycode are ignored.
Additionally, you may run into issues when using Remote Desktop Connection on Windows. Because these codes send shift very fast, Remote Desktop may miss the codes.
To fix this, open Remote Desktop Connection, click on "Show Options", open the the "Local Resources" tab. In the keyboard section, change the drop down to "On this Computer". This will fix the issue, and allow the characters to work correctly.
# One Shot Keys
One shot keys are keys that remain active until the next key is pressed, and then are released. This allows you to type keyboard combinations without pressing more than one key at a time. These keys are usually called "Sticky keys" or "Dead keys".
For example, if you define a key as `OSM(MOD_LSFT)`, you can type a capital A character by first pressing and releasing shift, and then pressing and releasing A. Your computer will see the shift key being held the moment shift is pressed, and it will see the shift key being released immediately after A is released.
One shot keys also work as normal modifiers. If you hold down a one shot key and type other keys, your one shot will be released immediately after you let go of the key.
Additionally, hitting keys five times in a short period will lock that key. This applies for both One Shot Modifiers and One Shot Layers, and is controlled by the `ONESHOT_TAP_TOGGLE` define.
You can control the behavior of one shot keys by defining these in `config.h`:
```c
#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped once again. */
#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
```
*`OSM(mod)` - Momentarily hold down *mod*. You must use the `MOD_*` keycodes as shown in [Mod Tap](#mod-tap), not the `KC_*` codes.
*`OSL(layer)` - momentary switch to *layer*.
Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it.
!> If you're having issues with OSM translating over Remote Desktop Connection, this can be fixed by opening the settings, going to the "Local Resources" tap, and in the keyboard section, change the drop down to "On this Computer". This will fix the issue and allow OSM to function properly over Remote Desktop.
## Callbacks
When you'd like to perform custom logic when pressing a one shot key, there are several callbacks you can choose to implement. You could indicate changes in one shot keys by flashing an LED or making a sound, for example.
There is a callback for `OSM(mod)`. It is called whenever the state of any one shot modifier key is changed: when it toggles on, but also when it is toggled off. You can use it like this:
```c
voidoneshot_mods_changed_user(uint8_tmods){
if(mods&MOD_MASK_SHIFT){
println("Oneshot mods SHIFT");
}
if(mods&MOD_MASK_CTRL){
println("Oneshot mods CTRL");
}
if(mods&MOD_MASK_ALT){
println("Oneshot mods ALT");
}
if(mods&MOD_MASK_GUI){
println("Oneshot mods GUI");
}
if(!mods){
println("Oneshot mods off");
}
}
```
The `mods` argument contains the active mods after the change, so it reflects the current state.
When you use One Shot Tap Toggle (by adding `#define ONESHOT_TAP_TOGGLE 2` in your `config.h` file), you may lock a modifier key by pressing it the specified amount of times. There's a callback for that, too:
Last, there is also a callback for the `OSL(layer)` one shot key:
```c
voidoneshot_layer_changed_user(uint8_tlayer){
if(layer==1){
println("Oneshot layer 1 on");
}
if(!layer){
println("Oneshot layer off");
}
}
```
If any one shot layer is switched off, `layer` will be zero. When you're looking to do something on any layer change instead of one shot layer changes, `layer_state_set_user` is a better callback to use.
If you are making your own keyboard, there are also `_kb` equivalent functions:
```c
voidoneshot_locked_mods_changed_kb(uint8_tmods);
voidoneshot_mods_changed_kb(uint8_tmods);
voidoneshot_layer_changed_kb(uint8_tlayer);
```
As with any callback, be sure to call the `_user` variant to allow for further customizability.
# Tap-Hold Configuration Options
While Tap-Hold options are fantastic, they are not without their issues. We have tried to configure them with reasonal defaults, but that may still cause issues for some people.
These options let you modify the behavior of the Tap-Hold keys.
## Permissive Hold
As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
```c
#define PERMISSIVE_HOLD
```
This makes tap and hold keys (like Mod Tap) work better for fast typist, or for high `TAPPING_TERM` settings.
If you press a Mod Tap key, tap another key (press and release) and then release the Mod Tap key, all within the tapping term, it will output the "tapping" function for both keys.
For Instance:
-`SHFT_T(KC_A)` Down
-`KC_X` Down
-`KC_X` Up
-`SHFT_T(KC_A)` Up
Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this will be registered as `ax` by the firmware and host system. With permissive hold enabled, this modifies how this is handled by considering the Mod Tap keys as a Mod if another key is tapped, and would registered as `X` (`SHIFT`+`x`).
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
## Ignore Mod Tap Interrupt
To enable this setting, add this to your `config.h`:
```c
#define IGNORE_MOD_TAP_INTERRUPT
```
Similar to Permissive Hold, this alters how the firmware processes input for fast typist. If you press a Mod Tap key, press another key, release the Mod Tap key, and then release the normal key, it would normally output the "tapping" function for both keys. This may not be desirable for rolling combo keys.
Setting `Ignore Mod Tap Interrupt` requires holding both keys for the `TAPPING_TERM` to trigger the hold function (the mod).
For Instance:
-`SHFT_T(KC_A)` Down
-`KC_X` Down
-`SHFT_T(KC_A)` Up
-`KC_X` Up
Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` enabled, holding both keys are required for the `TAPPING_TERM` to register the hold action. A quick tap will output `ax` in this case, while a hold on both will still output `X` (`SHIFT`+`x`).
?> __Note__: This only concerns modifiers and not layer switching keys.
?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
## Tapping Force Hold
To enable `tapping force hold`, add the following to your `config.h`:
```c
#define TAPPING_FORCE_HOLD
```
When the user holds a key after tap, this repeats the tapped key rather to hold a modifier key. This allows to use auto repeat for the tapped key.
Example:
- SHFT_T(KC_A) Down
- SHFT_T(KC_A) Up
- SHFT_T(KC_A) Down
- wait more than tapping term...
- SHFT_T(KC_A) Up
With default settings, `a` will be sent on the first release, then `a` will be sent on the second press allowing the computer to trigger its auto repeat function.
With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allowing to use it as a modifier shortly after having used it as a tap.
!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
## Retro Tapping
To enable `retro tapping`, add the following to your `config.h`:
```c
#define RETRO_TAPPING
```
Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term.
For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead.
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any AVR keyboard that allows access to the C6 or B5 port (`#define C6_AUDIO` and/or `#define B5_AUDIO`), you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any AVR keyboard that allows access to certain PWM-capable pins, you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
Up to two simultaneous audio voices are supported, one driven by timer 1 and another driven by timer 3. The following pins can be defined as audio outputs in config.h:
Timer 1:
`#define B5_AUDIO`
`#define B6_AUDIO`
`#define B7_AUDIO`
Timer 3:
`#define C4_AUDIO`
`#define C5_AUDIO`
`#define C6_AUDIO`
If you add `AUDIO_ENABLE = yes` to your `rules.mk`, there's a couple different sounds that will automatically be enabled without any other configuration:
@@ -47,9 +59,25 @@ PLAY_LOOP(my_song);
It's advised that you wrap all audio features in `#ifdef AUDIO_ENABLE` / `#endif` to avoid causing problems when audio isn't built into the keyboard.
## Music mode
The available keycodes for audio are:
The music mode maps your columns to a chromatic scale, and your rows to octaves. This works best with ortholinear keyboards, but can be made to work with others. All keycodes less than `0xFF` get blocked, so you won't type while playing notes - if you have special keys/mods, those will still work. A work-around for this is to jump to a different layer with KC_NOs before (or after) enabling music mode.
*`AU_ON` - Turn Audio Feature on
*`AU_OFF` - Turn Audio Feature off
*`AU_TOG` - Toggle Audio Feature state
!> These keycodes turn all of the audio functionality on and off. Turning it off means that audio feedback, audio clicky, music mode, etc. are disabled, completely.
## ARM Audio Volume
For ARM devices, you can adjust the DAC sample values. If your board is too loud for you or your coworkers, you can set the max using `DAC_SAMPLE_MAX` in your `config.h`:
```c
#define DAC_SAMPLE_MAX 65535U
```
## Music Mode
The music mode maps your columns to a chromatic scale, and your rows to octaves. This works best with ortholinear keyboards, but can be made to work with others. All keycodes less than `0xFF` get blocked, so you won't type while playing notes - if you have special keys/mods, those will still work. A work-around for this is to jump to a different layer with KC_NOs before (or after) enabling music mode.
Recording is experimental due to some memory issues - if you experience some weird behavior, unplugging/replugging your keyboard will fix things.
@@ -72,19 +100,107 @@ In music mode, the following keycodes work differently, and don't pass through:
*`KC_UP` - speed-up playback
*`KC_DOWN` - slow-down playback
The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
#define PITCH_STANDARD_A 432.0f
You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller. To disable it, add this to your `config.h`:
#define NO_MUSIC_MODE
### Music Mask
By default, `MUSIC_MASK` is set to `keycode < 0xFF` which means keycodes less than `0xFF` are turned into notes, and don't output anything. You can change this by defining this in your `config.h` like this:
#define MUSIC_MASK keycode != KC_NO
Which will capture all keycodes - be careful, this will get you stuck in music mode until you restart your keyboard!
The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
For a more advanced way to control which keycodes should still be processed, you can use `music_mask_kb(keycode)` in `<keyboard>.c` and `music_mask_user(keycode)` in your `keymap.c`:
#define PITCH_STANDARD_A 432.0f
bool music_mask_user(uint16_t keycode) {
switch (keycode) {
case RAISE:
case LOWER:
return false;
default:
return true;
}
}
## MIDI functionalty
Things that return false are not part of the mask, and are always processed.
This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
### Music Map
By default, the Music Mode uses the columns and row to determine the scale for the keys. For a board that uses a rectangular matrix that matches the keyboard layout, this is just fine. However, for boards that use a more complicated matrix (such as the Planck Rev6, or many split keyboards) this would result in a very skewed experience.
However, the Music Map option allows you to remap the scaling for the music mode, so it fits the layout, and is more natural.
To enable this feature, add `#define MUSIC_MAP` to your `config.h` file, and then you will want to add a `uint8_t music_map` to your keyboard's `c` file, or your `keymap.c`.
You will want to use whichever `LAYOUT` macro that your keyboard uses here. This maps it to the correct key location. Start in the bottom left of the keyboard layout, and move to the right, and then upwards. Fill in all the entries until you have a complete matrix.
You can look at the [Planck Keyboard](https://github.com/qmk/qmk_firmware/blob/e9ace1487887c1f8b4a7e8e6d87c322988bec9ce/keyboards/planck/planck.c#L24-L29) as an example of how to implement this.
## Audio Click
This adds a click sound each time you hit a button, to simulate click sounds from the keyboard. And the sounds are slightly different for each keypress, so it doesn't sound like a single long note, if you type rapidly.
*`CK_TOGG` - Toggles the status (will play sound if enabled)
*`CK_ON` - Turns on Audio Click (plays sound)
*`CK_OFF` - Turns off Audio Click (doesn't play sound)
*`CK_RST` - Resets the frequency to the default state (plays sound at default frequency)
*`CK_UP` - Increases the frequency of the clicks (plays sound at new frequency)
*`CK_DOWN` - Decreases the frequency of the clicks (plays sound at new frequency)
The feature is disabled by default, to save space. To enable it, add this to your `config.h`:
#define AUDIO_CLICKY
You can configure the default, min and max frequencies, the stepping and built in randomness by defining these values:
| Option | Default Value | Description |
|--------|---------------|-------------|
| `AUDIO_CLICKY_FREQ_DEFAULT` | 440.0f | Sets the default/starting audio frequency for the clicky sounds. |
| `AUDIO_CLICKY_FREQ_MIN` | 65.0f | Sets the lowest frequency (under 60f are a bit buggy). |
| `AUDIO_CLICKY_FREQ_MAX` | 1500.0f | Sets the the highest frequency. Too high may result in coworkers attacking you. |
| `AUDIO_CLICKY_FREQ_FACTOR` | 1.18921f| Sets the stepping of UP/DOWN key codes. |
| `AUDIO_CLICKY_FREQ_RANDOMNESS` | 0.05f | Sets a factor of randomness for the clicks, Setting this to `0f` will make each click identical, and `1.0f` will make this sound much like the 90's computer screen scrolling/typing effect. |
## MIDI Functionality
This is still a WIP, but check out `quantum/process_keycode/process_midi.c` to see what's happening. Enable from the Makefile.
<!-- FIXME: Describe how backlighting works in QMK -->
Many keyboards support backlit keys by way of individual LEDs placed through or underneath the keyswitches. QMK is able to control the brightness of these LEDs by switching them on and off rapidly in a certain ratio, a technique known as *Pulse Width Modulation*, or PWM. By altering the duty cycle of the PWM signal, it creates the illusion of dimming.
## Backlight Keycodes
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
These keycodes control the backlight. Most keyboards use this for single color in-switch lighting.
## Usage
|Name|Description|
|----|-----------|
|`BL_x`|Set a specific backlight level between 0-9|
|`BL_ON`|An alias for `BL_9`|
|`BL_OFF`|An alias for `BL_0`|
|`BL_DEC`|Turn the backlight level down by 1|
|`BL_INC`|Turn the backlight level up by 1|
|`BL_TOGG`|Toggle the backlight on or off|
|`BL_STEP`|Step through backlight levels, wrapping around to 0 when you reach the top.|
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
```make
BACKLIGHT_ENABLE= yes
```
You should then be able to use the keycodes below to change the backlight level.
This feature is distinct from both the [RGB underglow](feature_rgblight.md) and [RGB matrix](feature_rgb_matrix.md) features as it usually allows for only a single colour per switch, though you can obviously use multiple different coloured LEDs on a keyboard.
Hardware PWM is only supported on certain pins of the MCU, so if the backlighting is not connected to one of them, a software PWM implementation triggered by hardware timer interrupts will be used.
Hardware PWM is supported according to the following table:
| Backlight Pin | Hardware timer |
|---------------|----------------|
|`B5` | Timer 1 |
|`B6` | Timer 1 |
|`B7` | Timer 1 |
|`C6` | Timer 3 |
| other | Software PWM |
The [audio feature](feature_audio.md) also uses hardware timers. Please refer to the following table to know what hardware timer the software PWM will use depending on the audio configuration:
When all timers are in use for [audio](feature_audio.md), the backlight software PWM will not use a hardware timer, but instead will be triggered during the matrix scan. In this case the backlight doesn't support breathing and might show lighting artifacts (for instance flickering), because the PWM computation might not be called with enough timing precision.
## Configuration
To change the behaviour of the backlighting, `#define` these in your `config.h`:
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information|
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 15 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
## Multiple backlight pins
Most keyboards have only one backlight pin which control all backlight LEDs (especially if the backlight is connected to an hardware PWM pin).
In software PWM, it is possible to define multiple backlight pins. All those pins will be turned on and off at the same time during the PWM duty cycle.
This feature allows to set for instance the Caps Lock LED (or any other controllable LED) brightness at the same level as the other LEDs of the backlight. This is useful if you have mapped LCTRL in place of Caps Lock and you need the Caps Lock LED to be part of the backlight instead of being activated when Caps Lock is on.
To activate multiple backlight pins, you need to add something like this to your user `config.h`:
~~~c
#define BACKLIGHT_LED_COUNT 2
#undef BACKLIGHT_PIN
#define BACKLIGHT_PINS { F5, B2 }
~~~
## Hardware PWM Implementation
When using the supported pins for backlighting, QMK will use a hardware timer configured to output a PWM signal. This timer will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the backlight pin will go low, and is pulled high again when the counter resets.
In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus the brightness, where `0x0000` is completely off and `0xFFFF` is completely on.
The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
## Software PWM Implementation
When `BACKLIGHT_PIN` is not set to a hardware backlight pin, QMK will use a hardware timer configured to trigger software interrupts. This time will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
When resetting to 0, the CPU will fire an OVF (overflow) interrupt that will turn the LEDs on, starting the duty cycle.
The desired brightness is calculated and stored in the `OCRxx` register. When the counter reaches this value, the CPU will fire a Compare Output match interrupt, which will turn the LEDs off.
In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus the brightness, where `0x0000` is completely off and `0xFFFF` is completely on.
The breathing effect is the same as in the hardware PWM implementation.
Currently Bluetooth support is limited to AVR based chips. For Bluetooth 2.1 Qmk has support for RN-42 HID Firmware and Bluefruit EZ Key the later of which is not produced anymore. For more recent BLE protocols currently only the Adafruit Bluefruit SPI friend is directly supported. BLE is needed to connect to iOS devices. Note iOS does not support Mouse Input.
|Board |Bluetooth Protocol |Connection Type |Rules.mk |Bluetooth Chip|
|[Bluefruit LE SPI Friend](https://www.adafruit.com/product/2633)|Bluetooth Low Energy | SPI | BLUETOOTH = AdafruitBLE | nRF5182 |
Not Supported Yet but possible:
* [Bluefruit LE UART Friend](https://www.adafruit.com/product/2479). [Possible tmk implementation found in](https://github.com/tmk/tmk_keyboard/issues/514)
* HC-05 boards flashed with RN-42 firmware. They apparently both use the CSR BC417 Chip. Flashing it with RN-42 firmware gives it HID capability.
* [Sparkfun Bluetooth mate](https://www.sparkfun.com/products/14839)
* HM-13 based boards
### Adafruit BLE SPI Friend
Currently The only bluetooth chipset supported by QMK is the Adafruit Bluefruit SPI Friend. It's a Nordic nRF5182 based chip running Adafruit's custom firmware. Data is transmitted via Adafruit's SDEP over Hardware SPI. The [Feather 32u4 Bluefruit LE](https://www.adafruit.com/product/2829) is supported as it's an AVR mcu connected via SPI to the Nordic BLE chip with Adafruit firmware. If Building a custom board with the SPI friend it would be easiest to just use the pin selection that the 32u4 feather uses but you can change the pins in the config.h options with the following defines:
*#define AdafruitBleResetPin D4
*#define AdafruitBleCSPin B4
*#define AdafruitBleIRQPin E6
A Bluefruit UART friend can be converted to an SPI friend, however this [requires](https://github.com/qmk/qmk_firmware/issues/2274) some reflashing and soldering directly to the MDBT40 chip.
## Adafruit EZ-Key hid
This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
<!-- FIXME: Document bluetooth support more completely. -->
## Bluetooth Rules.mk Options
Use only one of these
* BLUETOOTH_ENABLE = yes (Legacy Option)
* BLUETOOTH = RN42
* BLUETOOTH = AdafruitEZKey
* BLUETOOTH = AdafruitBLE
## Bluetooth Keycodes
This is used when multiple keyboard outputs can be selected. Currently this only allows for switching between USB and Bluetooth on keyboards that support both.
<!-- FIXME: Describe the bootmagic feature here. -->
There are three separate but related features that allow you to change the behavior of your keyboard without reflashing. While each of them have similar functionality, it is accessed in different ways depending on how your keyboard is configured.
## Bootmagic Keycodes
**Bootmagic** is a system for configuring your keyboard while it initializes. To trigger a Bootmagic command, hold down the Bootmagic key and one or more command keys.
Shortcuts for bootmagic options. You can use these even when bootmagic is off.
**Bootmagic Keycodes** are prefixed with `MAGIC_`, and allow you to access the Bootmagic functionality *after* your keyboard has initialized. To use the keycodes, assign them to your keymap as you would any other keycode.
|Name|Description|
|----|-----------|
|`MAGIC_SWAP_CONTROL_CAPSLOCK`|Swap Capslock and Left Control|
|`MAGIC_CAPSLOCK_TO_CONTROL`|Treat Capslock like a Control Key|
|`MAGIC_SWAP_LALT_LGUI`|Swap the left Alt and GUI keys|
|`MAGIC_SWAP_RALT_RGUI`|Swap the right Alt and GUI keys|
|`MAGIC_NO_GUI`|Disable the GUI key|
|`MAGIC_SWAP_GRAVE_ESC`|Swap the Grave and Esc key.|
|`MAGIC_SWAP_BACKSLASH_BACKSPACE`|Swap backslash and backspace|
|`MAGIC_HOST_NKRO`|Force NKRO on|
|`MAGIC_SWAP_ALT_GUI`/`AG_SWAP`|Swap Alt and Gui on both sides|
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK`|Disable the Control/Capslock swap|
|`MAGIC_UNCAPSLOCK_TO_CONTROL`|Disable treating Capslock like Control |
|`MAGIC_UNSWAP_LALT_LGUI`|Disable Left Alt and GUI switching|
|`MAGIC_UNSWAP_RALT_RGUI`|Disable Right Alt and GUI switching|
|`MAGIC_UNNO_GUI`|Enable the GUI key |
|`MAGIC_UNSWAP_GRAVE_ESC`|Disable the Grave/Esc swap |
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|Disable the backslash/backspace swap|
|`MAGIC_UNHOST_NKRO`|Force NKRO off|
|`MAGIC_UNSWAP_ALT_GUI`/`AG_NORM`|Disable the Alt/GUI switching|
|`MAGIC_TOGGLE_NKRO`|Turn NKRO on or off|
**Command**, formerly known as **Magic**, is another feature that allows you to control different aspects of your keyboard. While it shares some functionality with Bootmagic, it also allows you to do things that Bootmagic does not, such as printing version information to the console. For more information, see [Command](feature_command.md).
On some keyboards Bootmagic is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk` with:
```make
BOOTMAGIC_ENABLE= full
```
?> You may see `yes` being used in place of `full`, and this is okay. However, `yes` is deprecated, and ideally `full` (or `lite`) should be used instead.
Additionally, you can use [Bootmagic Lite](#bootmagic-lite) (a scaled down, very basic version of Bootmagic) by adding the following to your `rules.mk` file:
```make
BOOTMAGIC_ENABLE= lite
```
## Hotkeys
Hold down the Bootmagic key (Space by default) and the desired hotkey while plugging in your keyboard. For example, holding Space+`B` should cause it to enter the bootloader.
|`BOOTMAGIC_KEY_DEFAULT_LAYER_0` |`KC_0` |Make layer 0 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_1` |`KC_1` |Make layer 1 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_2` |`KC_2` |Make layer 2 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_3` |`KC_3` |Make layer 3 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_4` |`KC_4` |Make layer 4 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_5` |`KC_5` |Make layer 5 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_6` |`KC_6` |Make layer 6 the default layer |
|`BOOTMAGIC_KEY_DEFAULT_LAYER_7` |`KC_7` |Make layer 7 the default layer |
# Bootmagic Lite
In addition to the full blown Bootmagic feature, is the Bootmagic Lite feature that only handles jumping into the bootloader. This is great for boards that don't have a physical reset button but you need a way to jump into the bootloader, and don't want to deal with the headache that Bootmagic can cause.
To enable this version of Bootmagic, you need to enable it in your `rules.mk` with:
```make
BOOTMAGIC_ENABLE= lite
```
Additionally, you may want to specify which key to use. This is especially useful for keyboards that have unusual matrices. To do so, you need to specify the row and column of the key that you want to use. Add these entries to your `config.h` file:
```c
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 1
```
By default, these are set to 0 and 0, which is usually the "ESC" key on a majority of keyboards.
And to trigger the bootloader, you hold this key down when plugging the keyboard in. Just the single key.
!> Using bootmagic lite will **always reset** the EEPROM, so you will lose any settings that have been saved.
## Advanced Bootmagic Lite
The `bootmagic_lite` function is defined weakly, so that you can replace this in your code, if you need. A great example of this is the Zeal60 boards that have some additional handling needed.
To replace the function, all you need to do is add something like this to your code:
You can additional feature here. For instance, resetting the eeprom or requiring additional keys to be pressed to trigger bootmagic. Keep in mind that `bootmagic_lite` is called before a majority of features are initialized in the firmware.
The Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once and produce a different effect. For instance, hitting `A` and `S` within the tapping term would hit `ESC` instead, or have it perform even more complex tasks.
To enable this feature, yu need to add `COMBO_ENABLE = yes` to your `rules.mk`.
Additionally, in your `config.h`, you'll need to specify the number of combos that you'll be using, by adding `#define COMBO_COUNT 1` (replacing 1 with the number that you're using).
<!-- At this time, this is necessary -->
Also, by default, the tapping term for the Combos is set to the same value as `TAPPING_TERM` (200 by default on most boards). But you can specify a different value by defining it in your `config.h`. For instance: `#define COMBO_TERM 300` would set the time out period for combos to 300ms.
Then, your `keymap.c` file, you'll need to define a sequence of keys, terminated with `COMBO_END`, and a structure to list the combination of keys, and it's resulting action.
This will send Ctrl+C if you hit Z and C, and Ctrl+V if you hit X and V. But you could change this to do stuff like change layers, play sounds, or change settings.
## Additional Configuration
If you're using long combos, or even longer combos, you may run into issues with this, as the structure may not be large enough to accommodate what you're doing.
In this case, you can add either `#define EXTRA_LONG_COMBOS` or `#define EXTRA_EXTRA_LONG_COMBOS` in your `config.h` file.
You may also be able to enable action keys by defining `COMBO_ALLOW_ACTION_KEYS`.
Command, formerly known as Magic, is a way to change your keyboard's behavior without having to flash or unplug it to use [Bootmagic](feature_bootmagic.md). There is a lot of overlap between this functionality and the [Bootmagic Keycodes](feature_bootmagic.md#keycodes). Wherever possible we encourage you to use that feature instead of Command.
On some keyboards Command is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk`:
```make
COMMAND_ENABLE= yes
```
## Usage
To use Command, hold down the key combination defined by the `IS_COMMAND()` macro. By default this is Left Shift+Right Shift. Then, press the key corresponding to the command you want. For example, to output the current QMK version to the QMK Toolbox console, press Left Shift+Right Shift+`V`.
## Configuration
If you would like to change the key assignments for Command, `#define` these in your `config.h` at either the keyboard or keymap level. All keycode assignments here must omit the `KC_` prefix.
Your keymap can include shortcuts to common operations, for example shifted keys. This page documents the functions that are available to you.
People often define custom names using `#define`. For example:
```c
#define FN_CAPS LT(_FL, KC_CAPSLOCK)
#define ALT_TAB LALT(KC_TAB)
```
This will allow you to use `FN_CAPS` and `ALT_TAB` in your `KEYMAP()`, keeping it more readable.
### Limits of these aliases
Currently, the keycodes able to used with these functions are limited to the [Basic Keycodes](keycodes_basic.html), 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.html).
## Switching and toggling layers
These functions allow you to activate layers in various ways.
*`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer.
*`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped.
*`TG(layer)` - toggles a layer on or off.
*`TO(layer)` - Goes to a layer. This code is special, because it lets you go either up or down the stack -- just goes directly to the layer you want. So while other codes only let you go _up_ the stack (from layer 0 to layer 3, for example), `TO(2)` is going to get you to layer 2, no matter where you activate it from -- even if you're currently on layer 5. This gets activated on keydown (as soon as the key is pressed).
*`TT(layer)` - Layer Tap-Toggle. If you hold the key down, the layer becomes active, and then deactivates when you let go. And if you tap it, the layer simply becomes active (toggles on). It needs 5 taps by default, but you can set it by defining `TAPPING_TOGGLE`, for example, `#define TAPPING_TOGGLE 2` for just two taps.
## Working With Layers
Care must be taken when switching layers, it's possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard.) We've created some guidelines to help users avoid the most common problems.
### Beginners
If you are just getting started with QMK you will want to keep everything simple. Follow these guidelines when setting up your layers:
* Setup layer 0 as your "base" layer. This is your normal typing layer, and could be whatever layout you want (qwerty, dvorak, colemak, etc.)
* Arrange your layers in a "tree" layout, with layer 0 as the root. Do not try to enter the same layer from more than one other layer.
* Never try to stack a higher numbered layer on top of a lower numbered layer. Doing so is tricky and error prone.
### Intermediate Users
Sometimes you need more than one base layer. For example, if you want to switch between QWERTY and Dvorak, switch between layouts for different countries, or switch your layout for different videogames. Your base layers should always be the lowest numbered layers. When you have multiple base layers you should always treat them as mutually exclusive. When one base layer is on the others are off.
### Advanced Users
Once you have a good feel for how layers work and what you can do, you can get more creative. The rules listed in the beginner section will help you be successful by avoiding some of the tricker details but they can be constraining, especially for ultra-compact keyboard users. Understanding how layers work will allow you to use them in more advanced ways.
Layers stack on top of each other in numerical order. When determining what a keypress does, QMK scans the layers from the top down, stopping when it reaches the first active layer that is not set to `KC_TRNS`. As a result if you activate a layer that is numerically lower than your current layer, and your current layer (or another layer that is active and higher than your target layer) has something other than `KC_TRNS`, that is the key that will be sent, not the key on the layer you just activated. This is the cause of most people's "why doesn't my layer get switched" problem.
## 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.
*`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*
You can also chain these, like this:
LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
## Shifted Keycodes
The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols.
|Name|Description|
|----|-----------|
| KC_TILD | ~ |
| KC_EXLM | ! |
| KC_QUES | ? |
| KC_AT | @ |
| KC_HASH | # |
| KC_DLR | $ |
| KC_PERC | % |
| KC_CIRC | ^ |
| KC_AMPR | & |
| KC_ASTR | * |
| KC_LPRN | ( |
| KC_RPRN | ) |
| KC_UNDS | _ |
| KC_PLUS | + |
| KC_DQUO | " |
| KC_LCBR | { |
| KC_RCBR | } |
| KC_LABK | < |
| KC_RABK | > |
| KC_PIPE | | |
| KC_COLN | : |
## Mod Tap
`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.
These are the values you can use for the `mod` in `MT()` and `OSM()`:
* MOD_LCTL
* MOD_LSFT
* MOD_LALT
* MOD_LGUI
* MOD_RCTL
* MOD_RSFT
* MOD_RALT
* MOD_RGUI
* MOD_HYPR
* MOD_MEH
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. Note however, that you cannot mix right and left side modifiers.
We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
*`CTL_T(kc)` - is LCTL when held and *kc* when tapped
*`SFT_T(kc)` - is LSFT when held and *kc* when tapped
*`ALT_T(kc)` - is LALT when held and *kc* when tapped
*`ALGR_T(kc)` - is AltGr when held and *kc* when tapped
*`GUI_T(kc)` - is LGUI when held and *kc* when tapped
*`ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
*`LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
*`MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
## One Shot Keys
One shot keys are keys that remain active until the next key is pressed, and then are releasd. This allows you to type keyboard combinations without pressing more than one key at a time.
For example, if you define a key as `OSM(MOD_LSFT)`, you can type a capital A character by first pressing and releasing shift, and then pressing and releasing A. Your computer will see the shift key being held the moment shift is pressed, and it will see the shift key being released immediately after A is released.
One shot keys also work as normal modifiers. If you hold down a one shot key and type other keys, your one shot will be released immediately after you let go of the key.
You can control the behavior of one shot keys by defining these in `config.h`:
```c
#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */
#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
```
*`OSM(mod)` - Momentarily hold down *mod*. You must use the `MOD_*` keycodes as shown in [Mod Tap](#mod-tap), not the `KC_*` codes.
*`OSL(layer)` - momentary switch to *layer*.
## Permissive Hold
As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
```
#define PERMISSIVE_HOLD
```
This makes it easier for fast typists to use dual-function keys. Without this, if you let go of a held key inside the tapping term, it won't register.
Example: (Tapping Term = 200ms)
- SHFT_T(KC_A) Down
- KC_X Down
- KC_X Up
- SHFT_T(KC_A) Up
With defaults, if above is typed within tapping term, this will emit `ax`. With permissive hold, if above is typed within tapping term, this will emit `X` (so, Shift+X).
| Not defined | Use the default algorithm, currently sym_g | Nothing |
| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
**Regarding split keyboards**:
The debounce code is compatible with split keyboards.
# Use your own debouncing code
* Set ```DEBOUNCE_TYPE = custom ```.
* Add ```SRC += debounce.c```
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
* Debouncing occurs after every raw matrix scan.
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
# Changing between included debouncing methods
You can either use your own code, by including your own debounce.c, or switch to another included one.
Included debounce methods are:
* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE_DELAY``` milliseconds of no further input for that row.
For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` milliseconds of no further input for that key
* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.
# Dynamic Macros: Record and Replay Macros in Runtime
QMK supports temporary macros created on the fly. We call these Dynamic Macros. They are defined by the user from the keyboard and are lost when the keyboard is unplugged or otherwise rebooted.
You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
To enable them, first add a new element to the end of your `keycodes` enum — `DYNAMIC_MACRO_RANGE`:
```c
enumkeycodes{
QWERTY=SAFE_RANGE,
COLEMAK,
DVORAK,
PLOVER,
LOWER,
RAISE,
BACKLIT,
EXT_PLV,
DYNAMIC_MACRO_RANGE,
};
```
Your `keycodes` enum may have a slightly different name. You must add `DYNAMIC_MACRO_RANGE` as the last element because `dynamic_macros.h` will add some more keycodes after it.
Below it, include the `dynamic_macro.h` header:
```c
#include"dynamic_macro.h"`
```
Add the following keys to your keymap:
*`DYN_REC_START1` — start recording the macro 1,
*`DYN_REC_START2` — start recording the macro 2,
*`DYN_MACRO_PLAY1` — replay the macro 1,
*`DYN_MACRO_PLAY2` — replay the macro 2,
*`DYN_REC_STOP` — finish the macro that is currently being recorded.
Add the following code to the very beginning of your `process_record_user()` function:
That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again.
For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above:
If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header).
For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
If you're using a 60% keyboard, or any other layout with no F-row, you will have noticed that there is no dedicated Escape key. Grave Escape is a feature that allows you to share the grave key (<code>`</code> and `~`) with Escape.
## Usage
Replace the `KC_GRAVE` key in your keymap (usually to the left of the `1` key) with `KC_GESC`. Most of the time this key will output `KC_ESC` when pressed. However, when Shift or GUI are held down it will output `KC_GRV` instead.
## What Your OS Sees
If Mary presses GESC on her keyboard, the OS will see an KC_ESC character. Now if Mary holds Shift down and presses GESC it will output `~`, or a shifted backtick. Now if she holds GUI/CMD/WIN, it will output a simple <code>`</code> character.
|`KC_GESC`|`GRAVE_ESC`|Escape when pressed, <code>`</code> when Shift or GUI are held|
### Caveats
On macOS, Command+<code>`</code> is by default mapped to "Move focus to next window" so it will not output a backtick. Additionally, Terminal always recognises this shortcut to cycle between windows, even if the shortcut is changed in the Keyboard preferences.
## Configuration
There are several possible key combinations this will break, among them Control+Shift+Escape on Windows and Command+Option+Escape on macOS. To work around this, you can `#define` these options in your `config.h`:
|`HPT_RST` | Reset haptic feedback config to default |
|`HPT_FBK` | Toggle feedback to occur on keypress, release or both |
|`HPT_BUZ` | Toggle solenoid buzz on/off |
|`HPT_MODI` | Go to next DRV2605L waveform |
|`HPT_MODD` | Go to previous DRV2605L waveform |
|`HPT_DWLI` | Increase Solenoid dwell time |
|`HPT_DWLD` | Decrease Solenoid dwell time |
### Solenoids
First you will need a build a circuit to drive the solenoid through a mosfet as most MCU will not be able to provide the current needed to drive the coil in the solenoid.
[Wiring diagram provided by Adafruit](https://playground.arduino.cc/uploads/Learning/solenoid_driver.pdf)
Select a pin that has PWM for the signal pin
```
#define SOLENOID_PIN *pin*
```
Beware that some pins may be powered during bootloader (ie. A13 on the STM32F303 chip) and will result in the solenoid kept in the on state through the whole flashing process. This may overheat and damage the solenoid. If you find that the pin the solenoid is connected to is triggering the solenoid during bootloader/DFU, select another pin.
### DRV2605L
DRV2605L is controlled over i2c protocol, and has to be connected to the SDA and SCL pins, these varies depending on the MCU in use.
#### Feedback motor setup
This driver supports 2 different feedback motors. Set the following in your `config.h` based on which motor you have selected.
##### ERM
Eccentric Rotating Mass vibration motors (ERM) is motor with a off-set weight attached so when drive signal is attached, the off-set weight spins and causes a sinusoidal wave that translate into vibrations.
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* Please refer to your datasheet for the optimal setting for your specific motor. */
#define RATED_VOLTAGE 3
#define V_PEAK 5
```
##### LRA
Linear resonant actuators (LRA, also know as a linear vibrator) works different from a ERM. A LRA has a weight and magnet suspended by springs and a voice coil. When the drive signal is applied, the weight would be vibrate on a single axis (side to side or up and down). Since the weight is attached to a spring, there is a resonance effect at a specific frequency. This frequency is where the LRA will operate the most efficiently. Refer to the motor's datasheet for the recommanded range for this frequency.
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* Please refer to your datasheet for the optimal setting for your specific motor. */
#define RATED_VOLTAGE 2
#define V_PEAK 2.8
#define V_RMS 2.0
#define V_PEAK 2.1
#define F_LRA 205 /* resonance freq */
```
#### DRV2605L waveform library
DRV2605L comes with preloaded library of various waveform sequences that can be called and played. If writing a macro, these waveforms can be played using `DRV_pulse(*sequence name or number*)`
List of waveform sequences from the datasheet:
|seq# | Sequence name |seq# | Sequence name |seq# |Sequence name |
This is an integration of Peter Fleury's LCD library. This page will explain the basics. [For in depth documentation visit his page.](http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__lcd.html)
You can enable support for HD44780 Displays by setting the `HD44780_ENABLE` flag in your keyboards `rules.mk` to yes. This will use about 400 KB of extra space.
## Configuration
You will need to configure the pins used by your display and its number of lines and collumn in your keyboards `config.h`.
Uncomment the section labled HD44780 and change the parameters as needed.
````
/*
* HD44780 LCD Display Configuration
*/
#define LCD_LINES 2 //< number of visible lines of the display
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
#define LCD_RS_PORT LCD_PORT //< port for RS line
#define LCD_RS_PIN 3 //< pin for RS line
#define LCD_RW_PORT LCD_PORT //< port for RW line
#define LCD_RW_PIN 2 //< pin for RW line
#define LCD_E_PORT LCD_PORT //< port for Enable line
#define LCD_E_PIN 1 //< pin for Enable line
#endif
````
Should you need to configure other properties you can copy them from `quantum/hd44780.h` and set them in your `config.h`
## Usage
To initialize your display call lcd_init() with one of these parameters:
````
LCD_DISP_OFF : display off
LCD_DISP_ON : display on, cursor off
LCD_DISP_ON_CURSOR : display on, cursor on
LCD_DISP_ON_CURSOR_BLINK : display on, cursor on flashing
````
This is best done in your keyboards `matrix_init_kb` or your keymaps `matrix_init_user`.
It is advised to clear the display before use.
To do so call `lcd_clrsrc()`.
To now print something to your Display you first call `lcd_gotoxy(column, line)`. To go to the start of the first line you would call `lcd_gotoxy(0, 0)` and then print a string with `lcd_puts("example string")`.
There are more posible methods to control the display. [For in depth documentation please visit the linked page.](http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__lcd.html)
Sometimes you may find yourself needing to hold down a specific key for a long period of time. Key Lock holds down the next key you press for you. Press it again, and it will be released.
Let's say you need to type in ALL CAPS for a few sentences. Hit `KC_LOCK`, and then Shift. Now, Shift will be considered held until you tap it again. You can think of Key Lock as Caps Lock, but supercharged.
## Usage
First, enable Key Lock by setting `KEY_LOCK_ENABLE = yes` in your `rules.mk`. Then pick a key in your keymap and assign it the keycode `KC_LOCK`.
|`KC_LOCK`|Hold down the next key pressed, until the key is pressed again|
## Caveats
Key Lock is only able to hold standard action keys and [One Shot modifier](quantum_keycodes.md#one-shot-keys) keys (for example, if you have your Shift defined as `OSM(KC_LSFT)`).
This does not include any of the QMK special functions (except One Shot modifiers), or shifted versions of keys such as `KC_LPRN`. If it's in the [Basic Keycodes](keycodes_basic.md) list, it can be held.
The `layouts/` folder contains different physical key layouts that can apply to different keyboards.
The `layouts/` folder contains different physical key layouts that can apply to different keyboards.
```
layouts/
@@ -21,7 +21,7 @@ layouts/
| + ...
```
The `layouts/default/` and `layouts/community/` are two examples of layout "repositories" - currently `default` will contain all of the information concerning the layout, and one default keymap named `default_<layout>`, for users to use as a reference. `community` contains all of the community keymaps, with the eventual goal of being split-off into a separate repo for users to clone into `layouts/`. QMK searches through all folders in `layouts/`, so it's possible to have multiple reposistories here.
The `layouts/default/` and `layouts/community/` are two examples of layout "repositories" - currently `default` will contain all of the information concerning the layout, and one default keymap named `default_<layout>`, for users to use as a reference. `community` contains all of the community keymaps, with the eventual goal of being split-off into a separate repo for users to clone into `layouts/`. QMK searches through all folders in `layouts/`, so it's possible to have multiple repositories here.
Each layout folder is named (`[a-z0-9_]`) after the physical aspects of the layout, in the most generic way possible, and contains a `readme.md` with the layout to be defined by the keyboard:
@@ -33,12 +33,14 @@ Each layout folder is named (`[a-z0-9_]`) after the physical aspects of the layo
New names should try to stick to the standards set by existing layouts, and can be discussed in the PR/Issue.
## Supporting a layout
## Supporting a Layout
For a keyboard to support a layout, the variable (`[a-z0-9_]`) must be defined in it's `<keyboard>.h`, and match the number of arguments/keys (and preferrably the physical layout):
For a keyboard to support a layout, the variable must be defined in it's `<keyboard>.h`, and match the number of arguments/keys (and preferably the physical layout):
#define LAYOUT_60_ansi KEYMAP_ANSI
The name of the layout must match this regex: `[a-z0-9_]+`
The folder name must be added to the keyboard's `rules.mk`:
LAYOUTS = 60_ansi
@@ -49,16 +51,43 @@ The folder name must be added to the keyboard's `rules.mk`:
but the `LAYOUT_<layout>` variable must be defined in `<folder>.h` as well.
## Tips for making layouts keyboard-agnostic
## Building a Keymap
You should be able to build the keyboard keymap with a command in this format:
make <keyboard>:<layout>
### Conflicting layouts
When a keyboard supports multiple layout options,
LAYOUTS = ortho_4x4 ortho_4x12
And a layout exists for both options,
```
layouts/
+ community/
| + ortho_4x4/
| | + <layout>/
| | | + ...
| + ortho_4x12/
| | + <layout>/
| | | + ...
| + ...
```
The FORCE_LAYOUT argument can be used to specify which layout to build
make <keyboard>:<layout> FORCE_LAYOUT=ortho_4x4
make <keyboard>:<layout> FORCE_LAYOUT=ortho_4x12
## 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
In your config.h, you can also use this variable to include the keyboard's `config.h`:
#include QMK_KEYBOARD_CONFIG_H
If you want to keep some keyboard-specific code, you can use these variables to escape it with an `#ifdef` statement:
*`KEYBOARD_<folder1>_<folder2>`
@@ -73,4 +102,8 @@ For example:
#endif
```
Note that the names are lowercase and match the folder/file names for the keyboard/revision exactly.
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.
If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen.
That's what `KC_LEAD` does. Here's an example:
1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else.
2. Include the line `#define LEADER_TIMEOUT 300`somewhere in your keymap.c file, probably near the top. The 300 there is 300ms -- that's how long you have for the sequence of keys following the leader. You can tweak this value for comfort, of course.
3. Within your `matrix_scan_user` function, do something like this:
2. Include the line `#define LEADER_TIMEOUT 300`in your `config.h`. This sets the timeout for the `KC_LEAD` key. Specifically, when you press the `KC_LEAD` key, you only have a certain amount of time to complete the Leader Key sequence. The `300` here sets that to 300ms, and you can increase this value to give you more time to hit the sequence. But any keys pressed during this timeout are intercepted and not sent, so you may want to keep this value low. .
* By default, this timeout is how long after pressing `KC_LEAD` to complete your entire sequence. This may be very low for some people. So you may want to increase this timeout. Optionally, you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped. This allows you to maintain a low value here, but still be able to use the longer sequences. To enable this option, add `#define LEADER_PER_KEY_TIMING` to your `config.h`.
3. Within your `matrix_scan_user` function, add something like this:
As you can see, you have three function. you can use -`SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and`SEQ_THREE_KEYS`for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously.
As you can see, you have a few function. You can use `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS`,`SEQ_THREE_KEYS`up to `SEQ_FIVE_KEYS` for longer sequences.
Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously.
## Adding Leader Key Support in the `rules.mk`
To add support for Leader Key you simply need to add a single line to your keymap's `rules.mk`:
```make
LEADER_ENABLE= yes
```
## Per Key Timing on Leader keys
Rather than relying on an incredibly high timeout for long leader key strings or those of us without 200wpm typing skills, we can enable per key timing to ensure that each key pressed provides us with more time to finish our stroke. This is incredibly helpful with leader key emulation of tap dance (read: multiple taps of the same key like C, C, C).
In order to enable this, place this in your `config.h`:
```c
#define LEADER_PER_KEY_TIMING
```
After this, it's recommended that you lower your `LEADER_TIMEOUT` to something less that 300ms.
```c
#define LEADER_TIMEOUT 250
```
Now, something like this won't seem impossible to do without a 1000MS leader key timeout:
```c
SEQ_THREE_KEYS(KC_C,KC_C,KC_C){
SEND_STRING("Per key timing is great!!!");
}
```
## Strict Key Processing
By default, the Leader Key feature will filter the keycode out of [`Mod-Tap`](feature_advanced_keycodes.md#mod-tap) and [`Layer Tap`](feature_advanced_keycodes.md#switching-and-toggling-layers) functions when checking for the Leader sequences. That means if you're using `LT(3, KC_A)`, it will pick this up as `KC_A` for the sequence, rather than `LT(3, KC_A)`, giving a more expected behavior for newer users.
While, this may be fine for most, if you want to specify the whole keycode (eg, `LT(3, KC_A)` from the example above) in the sequence, you can enable this by added `#define LEADER_KEY_STRICT_KEY_PROCESSING` to your `config.h` file. This well then disable the filtering, and you'll need to specify the whole keycode.
## Customization
The Leader Key feature has some additional customization to how the Leader Key feature works. It has two functions that can be called at certain parts of the process. Namely `leader_start()` and `leader_end()`.
The `leader_start()` function is called when you tap the `KC_LEAD` key, and the `leader_end()` function is called when either the leader sequence is completed, or the leader timeout is hit.
You can add these functions to your code (`keymap.c` usually) to add feedback to the Leader sequences (such as beeping or playing music).
```c
voidleader_start(void){
// sequence started
}
voidleader_end(void){
// sequence ended (no success/failuer detection)
}
```
### Example
This example will play the Mario "One Up" sound when you hit `KC_LEAD` to start the Leader Sequence, and will play "All Star" if it completes successfully or "Rick Roll" you if it fails.
This feature allows you to use LED matrices driven by external drivers. It hooks into the backlight system so you can use the same keycodes as backlighting to control it.
If you want to use RGB LED's you should use the [RGB Matrix Subsystem](feature_rgb_matrix.md) instead.
## Driver configuration
### IS31FL3731
There is basic support for addressable LED matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
LED_MATRIX_ENABLE = IS31FL3731
You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:
| Variable | Description | Default |
|----------|-------------|---------|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `LED_DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
| `LED_DRIVER_LED_COUNT` | (Required) How many LED lights are present across all drivers | |
| `LED_DRIVER_ADDR_1` | (Required) Address for the first LED driver | |
| `LED_DRIVER_ADDR_2` | (Optional) Address for the second LED driver | |
| `LED_DRIVER_ADDR_3` | (Optional) Address for the third LED driver | |
| `LED_DRIVER_ADDR_4` | (Optional) Address for the fourth LED driver | |
Here is an example using 2 drivers.
// 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:
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
Define these arrays listing all the LEDs in your `<keyboard>.c`:
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
/* Refer to IS31 manual for these locations
* driver
* | LED address
* | | */
{0, C3_3},
....
}
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731-simple.h`. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` ).
## Keycodes
All LED matrix keycodes are currently shared with the [backlight system](feature_backlight.md).
## LED Matrix Effects
Currently no LED matrix effects have been created.
## Custom layer effects
Custom layer effects can be done by defining this in your `<keyboard>.c`:
void led_matrix_indicators_kb(void) {
led_matrix_set_index_value(index, value);
}
A similar function works in the keymap as `led_matrix_indicators_user`.
## Suspended state
To use the suspend feature, add this to your `<keyboard>.c`:
Macros allow you to send multiple keystrokes when pressing just one key. QMK has a number of ways to define and use macros. These can do anything you want: type common phrases for you, copypasta, repetitive game movements, or even help you code.
!> **Security Note**: While it is possible to use macros to send passwords, credit card numbers, and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold of your keyboard will be able to access that information by opening a text editor.
## The New Way: `SEND_STRING()` & `process_record_user`
Sometimes you just want a key to type out words or phrases. For the most common situations we've provided `SEND_STRING()`, which will type out your string (i.e. a sequence of characters) for you. All ASCII characters that are easily translated to a keycode are supported (e.g. `\n\t`).
Here is an example `keymap.c` for a two-key keyboard:
We first define a new custom keycode in the range not occupied by any other keycodes.
Then we use the `process_record_user` function, which is called whenever a key is pressed or released, to check if our custom keycode has been activated.
If yes, we send the string `"QMK is the best thing ever!"` to the computer via the `SEND_STRING` macro (this is a C preprocessor macro, not to be confused with QMK macros).
We return `true` to indicate to the caller that the key press we just processed should continue to be processed as normal (as we didn't replace or alter the functionality).
Finally, we define the keymap so that the first button activates our macro and the second button is just an escape button.
You might want to add more than one macro.
You can do that by adding another keycode and adding another case to the switch statement, like so:
You may want to use keys in your macros that you can't write down, such as `Ctrl` or `Home`.
You can send arbitrary keycodes by wrapping them in:
*`SS_TAP()` presses and releases a key.
*`SS_DOWN()` presses (but does not release) a key.
*`SS_UP()` releases a key.
For example:
SEND_STRING(SS_TAP(X_HOME));
Would tap `KC_HOME` - note how the prefix is now `X_`, and not `KC_`. You can also combine this with other strings, like this:
SEND_STRING("VE"SS_TAP(X_HOME)"LO");
Which would send "VE" followed by a `KC_HOME` tap, and "LO" (spelling "LOVE" if on a newline).
There's also a couple of mod shortcuts you can use:
*`SS_LCTRL(string)`
*`SS_LGUI(string)`
*`SS_LALT(string)`
*`SS_LSFT(string)`
*`SS_RALT(string)`
These press the respective modifier, send the supplied string and then release the modifier.
They can be used like this:
SEND_STRING(SS_LCTRL("a"));
Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
### Alternative Keymaps
By default, it assumes a US keymap with a QWERTY layout; if you want to change that (e.g. if your OS uses software Colemak), include this somewhere in your keymap:
#include<sendstring_colemak.h>
### Strings in Memory
If for some reason you're manipulating strings and need to print out something you just generated (instead of being a literal, constant string), you can use `send_string()`, like this:
```c
charmy_str[4]="ok.";
send_string(my_str);
```
The shortcuts defined above won't work with `send_string()`, but you can separate things out to different lines if needed:
```c
charmy_str[4]="ok.";
SEND_STRING("I said: ");
send_string(my_str);
SEND_STRING(".."SS_TAP(X_END));
```
## Advanced Macro Functions
There are some functions you may find useful in macro-writing. Keep in mind that while you can write some fairly advanced code within a macro, if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
### `record->event.pressed`
This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
```c
if(record->event.pressed){
// on keydown
}else{
// on keyup
}
```
### `register_code(<kc>);`
This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
### `unregister_code(<kc>);`
Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
### `tap_code(<kc>);`
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
### `register_code16(<kc>);`, `unregister_code16(<kc>);` and `tap_code16(<kc>);`
These functions work similar to their regular counterparts, but allow you to use modded keycodes (with Shift, Alt, Control, and/or GUI applied to them).
Eg, you could use `register_code16(S(KC_5));` instead of registering the mod, then registering the keycode.
### `clear_keyboard();`
This will clear all mods and keys currently pressed.
### `clear_mods();`
This will clear all mods currently pressed.
### `clear_keyboard_but_mods();`
This will clear all keys besides the mods currently pressed.
## Advanced Example:
### Super ALT↯TAB
This macro will register `KC_LALT` and tap `KC_TAB`, then wait for 1000ms. If the key is tapped again, it will send another `KC_TAB`; if there is no tap, `KC_LALT` will be unregistered, thus allowing you to cycle through windows.
This defines two macros which will be run when the key they are assigned to is pressed. If instead you'd like them to run when the key is released you can change the if statement:
if (!record->event.pressed) {
### Macro Commands
A macro can include the following commands:
* I() change interval of stroke in milliseconds.
* D() press key.
* U() release key.
* T() type key(press and release).
* W() wait (milliseconds).
* END end mark.
### Mapping a Macro to a Key
Use the `M()` function within your keymap to call a macro. For example, here is the keymap for a 2-key keyboard:
When you press the key on the left it will type "Hi!" and when you press the key on the right it will type "Bye!".
### Naming Your Macros
If you have a bunch of macros you want to refer to from your keymap while keeping the keymap easily readable you can name them using `#define` at the top of your file.
Mouse keys is a feature that allows you to emulate a mouse using your keyboard. You can move the pointer at different speeds, press 5 buttons and scroll in 8 directions.
## Adding mouse keys to your keyboard
To use mouse keys, you must at least enable mouse keys support and map mouse actions to keys on your keyboard.
### Enabling mouse keys
To enable mouse keys, add the following line to your keymap’s `rules.mk`:
```c
MOUSEKEY_ENABLE=yes
```
### Mapping mouse actions
In your keymap you can use the following keycodes to map key presses to mouse actions:
|Key |Aliases |Description |
|----------------|---------|-----------------|
|`KC_MS_UP` |`KC_MS_U`|Move cursor up |
|`KC_MS_DOWN` |`KC_MS_D`|Move cursor down |
|`KC_MS_LEFT` |`KC_MS_L`|Move cursor left |
|`KC_MS_RIGHT` |`KC_MS_R`|Move cursor right|
|`KC_MS_BTN1` |`KC_BTN1`|Press button 1 |
|`KC_MS_BTN2` |`KC_BTN2`|Press button 2 |
|`KC_MS_BTN3` |`KC_BTN3`|Press button 3 |
|`KC_MS_BTN4` |`KC_BTN4`|Press button 4 |
|`KC_MS_BTN5` |`KC_BTN5`|Press button 5 |
|`KC_MS_WH_UP` |`KC_WH_U`|Move wheel up |
|`KC_MS_WH_DOWN` |`KC_WH_D`|Move wheel down |
|`KC_MS_WH_LEFT` |`KC_WH_L`|Move wheel left |
|`KC_MS_WH_RIGHT`|`KC_WH_R`|Move wheel right |
|`KC_MS_ACCEL0` |`KC_ACL0`|Set speed to 0 |
|`KC_MS_ACCEL1` |`KC_ACL1`|Set speed to 1 |
|`KC_MS_ACCEL2` |`KC_ACL2`|Set speed to 2 |
## Configuring mouse keys
Mouse keys supports two different modes to move the cursor:
* **Accelerated (default):** Holding movement keys accelerates the cursor until it reaches its maximum speed.
* **Constant:** Holding movement keys moves the cursor at constant speeds.
The same principle applies to scrolling.
Configuration options that are times, intervals or delays are given in milliseconds. Scroll speed is given as multiples of the default scroll step. For example, a scroll speed of 8 means that each scroll action covers 8 times the length of the default scroll step as defined by your operating system or application.
### Accelerated mode
This is the default mode. You can adjust the cursor and scrolling acceleration using the following settings in your keymap’s `config.h` file:
|`MOUSEKEY_DELAY` |300 |Delay between pressing a movement key and cursor movement|
|`MOUSEKEY_INTERVAL` |50 |Time between cursor movements |
|`MOUSEKEY_MAX_SPEED` |10 |Maximum cursor speed at which acceleration stops |
|`MOUSEKEY_TIME_TO_MAX` |20 |Time until maximum cursor speed is reached |
|`MOUSEKEY_WHEEL_MAX_SPEED` |8 |Maximum number of scroll steps per scroll action |
|`MOUSEKEY_WHEEL_TIME_TO_MAX`|40 |Time until maximum scroll speed is reached |
Tips:
* Setting `MOUSEKEY_DELAY` too low makes the cursor unresponsive. Setting it too high makes small movements difficult.
* For smoother cursor movements, lower the value of `MOUSEKEY_INTERVAL`. If the refresh rate of your display is 60Hz, you could set it to `16` (1/60). As this raises the cursor speed significantly, you may want to lower `MOUSEKEY_MAX_SPEED`.
* Setting `MOUSEKEY_TIME_TO_MAX` or `MOUSEKEY_WHEEL_TIME_TO_MAX` to `0` will disable acceleration for the cursor or scrolling respectively. This way you can make one of them constant while keeping the other accelerated, which is not possible in constant speed mode.
Cursor acceleration uses the same algorithm as the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
### Constant mode
In this mode you can define multiple different speeds for both the cursor and the mouse wheel. There is no acceleration. `KC_ACL0`, `KC_ACL1` and `KC_ACL2` change the cursor and scroll speed to their respective setting.
You can choose whether speed selection is momentary or tap-to-select:
* **Momentary:** The chosen speed is only active while you hold the respective key. When the key is raised, mouse keys returns to the unmodified speed.
* **Tap-to-select:** The chosen speed is activated when you press the respective key and remains active even after the key has been raised. The default speed is that of `KC_ACL1`. There is no unmodified speed.
The default speeds from slowest to fastest are as follows:
128x32 OLED modules using SSD1306 driver IC over I2C. Supported on AVR based keyboards. Possible but untested hardware includes ARM based keyboards and other sized OLED modules using SSD1306 over I2C, such as 128x64.
!> Warning: This OLED Driver currently uses the new i2c_master driver from split common code. If your split keyboard uses i2c to communication between sides this driver could cause an address conflict (serial is fine). Please contact your keyboard vendor and ask them to migrate to the latest split common code to fix this.
## Usage
To enable the OLED feature, there are three steps. First, when compiling your keyboard, you'll need to set `OLED_DRIVER_ENABLE=yes` in `rules.mk`, e.g.:
```
OLED_DRIVER_ENABLE = yes
```
This enables the feature and the `OLED_DRIVER_ENABLE` define. Then in your `keymap.c` file, you will need to implement the user task call, e.g:
```C++
#ifdef OLED_DRIVER_ENABLE
void oled_task_user(void) {
// Host Keyboard Layer Status
oled_write_P(PSTR("Layer: "), false);
switch (biton32(layer_state)) {
case _QWERTY:
oled_write_P(PSTR("Default\n"), false);
break;
case _FN:
oled_write_P(PSTR("FN\n"), false);
break;
case _ADJ:
oled_write_P(PSTR("ADJ\n"), false);
break;
default:
// Or use the write_ln shortcut over adding '\n' to the end of your string
In split keyboards, it is very common to have two OLED displays that each render different content and oriented flipped differently. You can do this by switching which content to render by using the return from `is_keyboard_master()` or `is_keyboard_left()` found in `split_util.h`, e.g:
|`OLED_DISPLAY_ADDRESS` |`0x3C` |The i2c address of the OLED Display |
|`OLED_FONT_H` |`"glcdfont.c"` |The font code file to use for custom fonts |
|`OLED_FONT_START` |`0` |The starting characer index for custom fonts |
|`OLED_FONT_END` |`224` |The ending characer index for custom fonts |
|`OLED_FONT_WIDTH` |`6` |The font width |
|`OLED_FONT_HEIGHT` |`8` |The font height (untested) |
|`OLED_DISABLE_TIMEOUT` |*Not defined* |Disables the built in OLED timeout feature. Useful when implementing custom timeout rules.|
## 128x64 & Custom sized OLED Displays
The default display size for this feature is 128x32 and all necessary defines are precalculated with that in mind. We have added a define, `OLED_DISPLAY_128X64`, to switch all the values to be used in a 128x64 display, as well as added a custom define, `OLED_DISPLAY_CUSTOM`, that allows you to provide the necessary values to the driver.
OLED displays driven by SSD1306 drivers only natively support in hard ware 0 degree and 180 degree rendering. This feature is done in software and not free. Using this feature will increase the time to calculate what data to send over i2c to the OLED. If you are strapped for cycles, this can cause keycodes to not register. In testing however, the rendering time on an `atmega32u4` board only went from 2ms to 5ms and keycodes not registering was only noticed once we hit 15ms.
90 Degree Rotated Rendering is achieved by using bitwise operations to rotate each 8 block of memory and uses two precalculated arrays to remap buffer memory to OLED memory. The memory map defines are precalculated for remap performance and are calculated based on the OLED Height, Width, and Block Size. For example, in the 128x32 implementation with a `uint8_t` block type, we have a 64 byte block size. This gives us eight 8 byte blocks that need to be rotated and rendered. The OLED renders horizontally two 8 byte blocks before moving down a page, e.g:
| | | | | | |
|---|---|---|---|---|---|
| 0 | 1 | | | | |
| 2 | 3 | | | | |
| 4 | 5 | | | | |
| 6 | 7 | | | | |
However the local buffer is stored as if it was Height x Width display instead of Width x Height, e.g:
| | | | | | |
|---|---|---|---|---|---|
| 3 | 7 | | | | |
| 2 | 6 | | | | |
| 1 | 5 | | | | |
| 0 | 4 | | | | |
So those precalculated arrays just index the memory offsets in the order in which each one iterates its data.
Pointing Device is a generic name for a feature intended to be generic: moving the system pointer arround. There are certainly other options for it - like mousekeys - but this aims to be easily modifiable and lightweight. You can implement custom keys to control functionality, or you can gather information from other peripherals and insert it directly here - let QMK handle the processing for you.
Pointing Device is a generic name for a feature intended to be generic: moving the system pointer around. There are certainly other options for it - like mousekeys - but this aims to be easily modifiable and lightweight. You can implement custom keys to control functionality, or you can gather information from other peripherals and insert it directly here - let QMK handle the processing for you.
To enable Pointing Device, uncomment the following line in your rules.mk:
@@ -44,4 +44,4 @@ case MS_SPECIAL:
break;
```
Recall that the mouse report is set to zero (except the buttons) whenever it is sent, so the scrolling would only occur once in each case.
Recall that the mouse report is set to zero (except the buttons) whenever it is sent, so the scrolling would only occur once in each case.
This feature allows you to use RGB LED matrices driven by external drivers. It hooks into the RGBLIGHT system so you can use the same keycodes as RGBLIGHT to control it.
If you want to use single color LED's you should use the [LED Matrix Subsystem](feature_led_matrix.md) instead.
## Driver configuration
---
### IS31FL3731
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
```C
RGB_MATRIX_ENABLE=IS31FL3731
```
Configure the hardware via your `config.h`:
```C
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`.
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
Define these arrays listing all the LEDs in your `<keyboard>.c`:
```C
constis31_ledg_is31_leds[DRIVER_LED_TOTAL]={
/* Refer to IS31 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0,C1_3,C2_3,C3_3},
....
}
```
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731.h`. The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
---
### IS31FL3733/IS31FL3737
!> For the IS31FL3737, replace all instances of `IS31FL3733` below with `IS31FL3737`.
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
```C
RGB_MATRIX_ENABLE=IS31FL3733
```
Configure the hardware via your `config.h`:
```C
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)
// The address will vary depending on your wiring:
// 00 <-> GND
// 01 <-> SCL
// 10 <-> SDA
// 11 <-> VCC
// ADDR1 represents A1:A0 of the 7-bit address.
// ADDR2 represents A3:A2 of the 7-bit address.
// The result is: 0b101(ADDR2)(ADDR1)
#define DRIVER_ADDR_1 0b1010000
#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
#define DRIVER_COUNT 2
#define DRIVER_1_LED_TOTAL 64
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
```
Currently only a single drivers is supported, but it would be trivial to support all 4 combinations. For now define `DRIVER_ADDR_2` as `DRIVER_ADDR_1`
Define these arrays listing all the LEDs in your `<keyboard>.c`:
```C
constis31_ledg_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).
---
### WS2812 (AVR only)
There is basic support for addressable RGB matrix lighting with a WS2811/WS2812{a,b,c} addressable LED strand. To enable it, add this to your `rules.mk`:
```C
RGB_MATRIX_ENABLE=WS2812
```
Configure the hardware via your `config.h`:
```C
// The pin connected to the data pin of the LEDs
#define RGB_DI_PIN D7
// The number of LEDs connected
#define DRIVER_LED_TOTAL 70
```
---
From this point forward the configuration is the same for all the drivers. The `led_config_t` struct provides a key electrical matrix to led index lookup table, what the physical position of each LED is on the board, and what type of key or usage the LED if the LED represents. Here is a brief example:
The first part, `// Key Matrix to LED Index`, tells the system what key this LED represents by using the key's electrical matrix row & col. The second part, `// LED Index to Physical Position` represents the LED's physical position on the keyboard. The first value, `x`, is between 0-224 (inclusive), and the second value, `y`, is between 0-64 (inclusive). This range is due to effect that calculate the center or halves for their animations. The easiest way to calculate these positions is imagine your keyboard is a grid, and the top left of the keyboard represents x, y coordinate 0, 0 and the bottom right of your keyboard represents 224, 64. Using this as a basis, you can use the following formula to calculate the physical position:
```C
x=224/(NUMBER_OF_COLS-1)*COL_POSITION
y=64/(NUMBER_OF_ROWS-1)*ROW_POSITION
```
Where NUMBER_OF_COLS, NUMBER_OF_ROWS, COL_POSITION, & ROW_POSITION are all based on the physical layout of your keyboard, not the electrical layout.
`// LED Index to Flag` is a bitmask, whether or not a certain LEDs is of a certain type. It is recommended that LEDs are set to only 1 type.
|`#define HAS_FLAGS(bits, flags)` |Returns true if `bits` has all `flags` set.|
|`#define HAS_ANY_FLAGS(bits, flags)`|Returns true if `bits` has any `flags` set.|
|`#define LED_FLAG_NONE 0x00` |If this LED has no flags. |
|`#define LED_FLAG_ALL 0xFF` |If this LED has all flags. |
|`#define LED_FLAG_MODIFIER 0x01` |If the Key for this LED is a modifier. |
|`#define LED_FLAG_UNDERGLOW 0x02` |If the LED is for underglow. |
|`#define LED_FLAG_KEYLIGHT 0x04` |If the LED is for key backlight. |
## Keycodes
All RGB keycodes are currently shared with the RGBLIGHT system:
*`RGB_TOG` - toggle
*`RGB_MOD` - cycle through modes
*`RGB_HUI` - increase hue
*`RGB_HUD` - decrease hue
*`RGB_SAI` - increase saturation
*`RGB_SAD` - decrease saturation
*`RGB_VAI` - increase value
*`RGB_VAD` - decrease value
*`RGB_SPI` - increase speed effect (no EEPROM support)
*`RGB_SPD` - decrease speed effect (no EEPROM support)
*`RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
## RGB Matrix Effects
All effects have been configured to support current configuration values (Hue, Saturation, Value, & Speed) unless otherwise noted below. These are the effects that are currently available:
```C
enumrgb_matrix_effects{
RGB_MATRIX_NONE=0,
RGB_MATRIX_SOLID_COLOR=1,// Static single hue, no speed support
RGB_MATRIX_ALPHAS_MODS,// Static dual hue, speed is hue for secondary hue
RGB_MATRIX_GRADIENT_UP_DOWN,// Static gradient top to bottom, speed controls how much gradient changes
RGB_MATRIX_BREATHING,// Single hue brightness cycling animation
RGB_MATRIX_CYCLE_ALL,// Full keyboard solid hue cycling through full gradient
RGB_MATRIX_CYCLE_LEFT_RIGHT,// Full gradient scrolling left to right
RGB_MATRIX_CYCLE_UP_DOWN,// Full gradient scrolling top to bottom
RGB_MATRIX_CYCLE_OUT_IN,// Full gradient scrolling out to in
RGB_MATRIX_CYCLE_OUT_IN_DUAL,// Full dual gradients scrolling out to in
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,// Full gradent Chevron shapped scrolling left to right
RGB_MATRIX_DUAL_BEACON,// Full gradient spinning around center of keyboard
RGB_MATRIX_RAINBOW_BEACON,// Full tighter gradient spinning around center of keyboard
RGB_MATRIX_RAINBOW_PINWHEELS,// Full dual gradients spinning two halfs of keyboard
RGB_MATRIX_RAINDROPS,// Randomly changes a single key's hue
RGB_MATRIX_JELLYBEAN_RAINDROPS,// Randomly changes a single key's hue and saturation
#if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
RGB_MATRIX_TYPING_HEATMAP,// How hot is your WPM!
RGB_MATRIX_DIGITAL_RAIN,// That famous computer simulation
By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rule.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this:
`rgb_matrix_user.inc` should go in the root of the keymap directory.
`rgb_matrix_kb.inc` should go in the root of the keyboard directory.
```C
// !!! DO NOT ADD #pragma once !!! //
// Step 1.
// Declare custom effects using the RGB_MATRIX_EFFECT macro
// (note the lack of semicolon after the macro!)
RGB_MATRIX_EFFECT(my_cool_effect)
RGB_MATRIX_EFFECT(my_cool_effect2)
// Step 2.
// Define effects inside the `RGB_MATRIX_CUSTOM_EFFECT_IMPLS` ifdef block
#ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
// e.g: A simple effect, self-contained within a single method
staticboolmy_cool_effect(effect_params_t*params){
RGB_MATRIX_USE_LIMITS(led_min,led_max);
for(uint8_ti=led_min;i<led_max;i++){
rgb_matrix_set_color(i,0xff,0xff,0x00);
}
returnled_max<DRIVER_LED_TOTAL;
}
// e.g: A more complex effect, relying on external methods and state, with
For inspiration and examples, check out the built-in effects under `quantum/rgb_matrix_animation/`
## Colors
These are shorthands to popular colors. The `RGB` ones can be passed to the `setrgb` functions, while the `HSV` ones to the `sethsv` functions.
|RGB |HSV |
|-------------------|-------------------|
|`RGB_WHITE` |`HSV_WHITE` |
|`RGB_RED` |`HSV_RED` |
|`RGB_CORAL` |`HSV_CORAL` |
|`RGB_ORANGE` |`HSV_ORANGE` |
|`RGB_GOLDENROD` |`HSV_GOLDENROD` |
|`RGB_GOLD` |`HSV_GOLD` |
|`RGB_YELLOW` |`HSV_YELLOW` |
|`RGB_CHARTREUSE` |`HSV_CHARTREUSE` |
|`RGB_GREEN` |`HSV_GREEN` |
|`RGB_SPRINGGREEN` |`HSV_SPRINGGREEN` |
|`RGB_TURQUOISE` |`HSV_TURQUOISE` |
|`RGB_TEAL` |`HSV_TEAL` |
|`RGB_CYAN` |`HSV_CYAN` |
|`RGB_AZURE` |`HSV_AZURE` |
|`RGB_BLUE` |`HSV_BLUE` |
|`RGB_PURPLE` |`HSV_PURPLE` |
|`RGB_MAGENTA` |`HSV_MAGENTA` |
|`RGB_PINK` |`HSV_PINK` |
These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Feel free to add to this list!
## Additional `config.h` Options
```C
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
#define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
#define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
```
## EEPROM storage
The EEPROM for it is currently shared with the RGBLIGHT system (it's generally assumed only one RGB would be used at a time), but could be configured to use its own 32bit address with:
```C
#define EECONFIG_RGB_MATRIX (uint32_t *)28
```
Where `28` is an unused index from `eeconfig.h`.
## Suspended state
To use the suspend feature, add this to your `<keyboard>.c`:
If you've installed addressable RGB lights on your keyboard you can control them with QMK. Currently we support the following addressable LEDs on Atmel AVR processors:
QMK has the ability to control RGB LEDs attached to your keyboard. This is commonly called *underglow*, due to the LEDs often being mounted on the bottom of the keyboard, producing a nice diffused effect when combined with a translucent case.
* WS2811 and variants (WS2812, WS2812B, WS2812C, etc)
* SK6812RGBW

Some keyboards come with RGB LEDs pre-installed. Others have to have LEDs installed after the fact. See below for information on modifying your keyboard.
Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
## Selecting Colors
Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
QMK uses Hue, Saturation, and Value to set color rather than using RGB. You can use the color wheel below to see how this works. Changing the Hue will cycle around the circle. Saturation will affect the intensity of the color, which you can see as you move from the inner part to the outer part of the wheel. Value sets the overall brightness.
* WS2811, WS2812, WS2812B, WS2812C, etc.
* SK6812, SK6812MINI, SK6805
<imgsrc="gitbook/images/color-wheel.svg"alt="HSV Color Wheel"width="250">
These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
If you would like to learn more about HSV you can start with the [Wikipedia article](https://en.wikipedia.org/wiki/HSL_and_HSV).
## Usage
On keyboards with onboard RGB LEDs, it is usually enabled by default. If it is not working for you, check that your `rules.mk` includes the following:
```make
RGBLIGHT_ENABLE= yes
```
At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these.
|`RGB_DI_PIN` |The pin connected to the data pin of the LEDs |
|`RGBLED_NUM` |The number of LEDs connected |
|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half directly wired to `RGB_DI_PIN` |
Then you should be able to use the keycodes below to change the RGB lighting to your liking.
### Color Selection
QMK uses [Hue, Saturation, and Value](https://en.wikipedia.org/wiki/HSL_and_HSV) to select colors rather than RGB. The color wheel below demonstrates how this works.
<imgsrc="gitbook/images/color-wheel.svg"alt="HSV Color Wheel"width="250"/>
Changing the **Hue** cycles around the circle.<br>
Changing the **Saturation** moves between the inner and outer sections of the wheel, affecting the intensity of the color.<br>
Changing the **Value** sets the overall brightness.<br>
#define RGB_DI_PIN D7 // The pin the LED strip is connected to
#define RGBLED_NUM 14 // Number of LEDs in your strip
Check out [this video](https://youtube.com/watch?v=VKrpPAHlisY) for a demonstration.
Note: For versions older than 0.6.117, The mode numbers were written directly. In `quantum/rgblight.h` there is a contrast table between the old mode number and the current symbol.
### Effect and Animation Toggles
Use these defines to add or remove animations from the firmware. When you are running low on flash space, it can be helpful to disable animations you are not using.
|`RGBLIGHT_EFFECT_BREATHE_CENTER` |*Not defined*|If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 |
|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 |
|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`1000` |How long to wait between light changes for the "Christmas" animation, in milliseconds|
|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation |
|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel |
|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation |
|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by |
|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`360` |Range adjustment for the rainbow swirl effect to get different swirls |
|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation |
### Example Usage to Reduce Memory Footprint
1. Remove `RGBLIGHT_ANIMATIONS` from `config.h`.
1. Selectively add the animations you want to enable. The following would enable two animations and save about 4KiB:
```diff
#undef RGBLED_NUM
-#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
```
### Optional Configuration
### Animation Speed
You can change the behavior of the RGB Lighting by setting these configuration values. Use `#define <Option> <Value>` in a `config.h` at the keyboard, revision, or keymap level.
| Option | Default Value | Description |
|--------|---------------|-------------|
| `RGBLIGHT_HUE_STEP` | 10 | How many hues you want to have available. |
| `RGBLIGHT_SAT_STEP` | 17 | How many steps of saturation you'd like. |
| `RGBLIGHT_VAL_STEP` | 17 | The number of levels of brightness you want. |
### Animations
If you have `#define RGBLIGHT_ANIMATIONS` in your `config.h` you will have a number of animation modes you can cycle through using the `RGB_MOD` key. You can also `#define` other options to tweak certain animations.
| Option | Default Value | Description |
|--------|---------------|-------------|
| `RGBLIGHT_ANIMATIONS` | | `#define` this to enable animation modes. |
| `RGBLIGHT_EFFECT_BREATHE_CENTER` | 1.85 | Used to calculate the curve for the breathing animation. Valid values 1.0-2.7. |
| `RGBLIGHT_EFFECT_BREATHE_MAX` | 255 | The maximum brightness for the breathing mode. Valid values 1-255. |
| `RGBLIGHT_EFFECT_SNAKE_LENGTH` | 4 | The number of LEDs to light up for the "snake" animation. |
| `RGBLIGHT_EFFECT_KNIGHT_LENGTH` | 3 | The number of LEDs to light up for the "knight" animation. |
| `RGBLIGHT_EFFECT_KNIGHT_OFFSET` | 0 | Start the knight animation this many LEDs from the start of the strip. |
| `RGBLIGHT_EFFECT_KNIGHT_LED_NUM` | RGBLED_NUM | The number of LEDs to have the "knight" animation travel. |
| `RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL` | 1000 | How long to wait between light changes for the "christmas" animation. Specified in ms. |
| `RGBLIGHT_EFFECT_CHRISTMAS_STEP` | 2 | How many LED's to group the red/green colors by for the christmas mode. |
You can also tweak the behavior of the animations by defining these consts in your `keymap.c`. These mostly affect the speed different modes animate at.
```c
// How long (in ms) to wait between animation steps for the breathing mode
Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
// How long (in milliseconds) to wait between animation steps for each of the "Snake" animations
If you need to change your RGB lighting in code, for example in a macro to change the color whenever you switch layers, QMK provides a set of functions to assist you. See [`rgblight.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight.h) for the full list, but the most commonly used functions include:
|`rgblight_enable()` |Turn LEDs on, based on their previous state |
|`rgblight_enable_noeeprom()` |Turn LEDs on, based on their previous state (not written to EEPROM) |
|`rgblight_disable()` |Turn LEDs off |
|`rgblight_disable_noeeprom()` |Turn LEDs off (not written to EEPROM) |
|`rgblight_mode(x)` |Set the mode, if RGB animations are enabled |
|`rgblight_mode_noeeprom(x)` |Set the mode, if RGB animations are enabled (not written to EEPROM) |
|`rgblight_setrgb(r, g, b)` |Set all LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_at(r, g, b, led)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM) |
|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_setrgb_master(r, g, b)` |Set the LEDs on the master side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_setrgb_slave(r, g, b)` |Set the LEDs on the slave side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 |
|`rgblight_sethsv_noeeprom(h, s, v)` |Set all LEDs to the given HSV value where `h` is between 0 and 360 and `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_at(h, s, v, led)` |Set a single LED to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `led` is between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)|
|`rgblight_sethsv_master(h, s, v)` |Set the LEDs on the master side to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_sethsv_slave(h, s, v)` |Set the LEDs on the slave side to the given HSV value, where `h` is between 0 and 360, `s`/`v` are between 0 and 255 (not written to EEPROM) |
|`rgblight_toggle()` |Toggle all LEDs between on and off |
|`rgblight_toggle_noeeprom()` |Toggle all LEDs between on and off (not written to EEPROM) |
|`rgblight_step()` |Change the mode to the next RGB animation in the list of enabled RGB animations |
|`rgblight_step_noeeprom()` |Change the mode to the next RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|`rgblight_step_reverse()` |Change the mode to the previous RGB animation in the list of enabled RGB animations |
|`rgblight_step_reverse_noeeprom()` |Change the mode to the previous RGB animation in the list of enabled RGB animations (not written to EEPROM) |
|`rgblight_increase_hue()` |Increase the hue for all LEDs. This wraps around at maximum hue |
|`rgblight_increase_hue_noeeprom()` |Increase the hue for all LEDs. This wraps around at maximum hue (not written to EEPROM) |
|`rgblight_decrease_hue()` |Decrease the hue for all LEDs. This wraps around at minimum hue |
|`rgblight_decrease_hue_noeeprom()` |Decrease the hue for all LEDs. This wraps around at minimum hue (not written to EEPROM) |
|`rgblight_increase_sat()` |Increase the saturation for all LEDs. This wraps around at maximum saturation |
|`rgblight_increase_sat_noeeprom()` |Increase the saturation for all LEDs. This wraps around at maximum saturation (not written to EEPROM) |
|`rgblight_decrease_sat()` |Decrease the saturation for all LEDs. This wraps around at minimum saturation |
|`rgblight_decrease_sat_noeeprom()` |Decrease the saturation for all LEDs. This wraps around at minimum saturation (not written to EEPROM) |
|`rgblight_increase_val()` |Increase the value for all LEDs. This wraps around at maximum value |
|`rgblight_increase_val_noeeprom()` |Increase the value for all LEDs. This wraps around at maximum value (not written to EEPROM) |
|`rgblight_decrease_val()` |Decrease the value for all LEDs. This wraps around at minimum value |
|`rgblight_decrease_val_noeeprom()` |Decrease the value for all LEDs. This wraps around at minimum value (not written to EEPROM) |
|`rgblight_set_clipping_range(pos, num)` |Set clipping Range |
## Colors
These are shorthands to popular colors. The `RGB` ones can be passed to the `setrgb` functions, while the `HSV` ones to the `sethsv` functions.
|RGB |HSV |
|-------------------|-------------------|
|`RGB_WHITE` |`HSV_WHITE` |
|`RGB_RED` |`HSV_RED` |
|`RGB_CORAL` |`HSV_CORAL` |
|`RGB_ORANGE` |`HSV_ORANGE` |
|`RGB_GOLDENROD` |`HSV_GOLDENROD` |
|`RGB_GOLD` |`HSV_GOLD` |
|`RGB_YELLOW` |`HSV_YELLOW` |
|`RGB_CHARTREUSE` |`HSV_CHARTREUSE` |
|`RGB_GREEN` |`HSV_GREEN` |
|`RGB_SPRINGGREEN` |`HSV_SPRINGGREEN` |
|`RGB_TURQUOISE` |`HSV_TURQUOISE` |
|`RGB_TEAL` |`HSV_TEAL` |
|`RGB_CYAN` |`HSV_CYAN` |
|`RGB_AZURE` |`HSV_AZURE` |
|`RGB_BLUE` |`HSV_BLUE` |
|`RGB_PURPLE` |`HSV_PURPLE` |
|`RGB_MAGENTA` |`HSV_MAGENTA` |
|`RGB_PINK` |`HSV_PINK` |
```c
rgblight_setrgb(RGB_ORANGE);
rgblight_sethsv_noeeprom(HSV_GREEN);
rgblight_setrgb_at(RGB_GOLD,3);
rgblight_sethsv_range(HSV_WHITE,0,6);
```
These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Feel free to add to this list!
## Changing the order of the LEDs
If you want to make the logical order of LEDs different from the electrical connection order, you can do this by defining the `RGBLIGHT_LED_MAP` macro in your `config.h`.
Normally, the contents of the LED buffer are output to the LEDs in the same order.
For keyboards that use the RGB LEDs as a backlight for each key, you can also define it as in the example below.
```c
// config.h
#define RGBLED_NUM 30
/* RGB LED Conversion macro from physical array to electric array */
#define LED_LAYOUT( \
L00, L01, L02, L03, L04, L05, \
L10, L11, L12, L13, L14, L15, \
L20, L21, L22, L23, L24, L25, \
L30, L31, L32, L33, L34, L35, \
L40, L41, L42, L43, L44, L45 ) \
{ \
L05, L04, L03, L02, L01, L00, \
L10, L11, L12, L13, L14, L15, \
L25, L24, L23, L22, L21, L20, \
L30, L31, L32, L33, L34, L35, \
L46, L45, L44, L43, L42, L41 \
}
/* RGB LED logical order map */
/* Top->Bottom, Right->Left */
#define RGBLIGHT_LED_MAP LED_LAYOUT( \
25, 20, 15, 10, 5, 0, \
26, 21, 16, 11, 6, 1, \
27, 22, 17, 12, 7, 2, \
28, 23, 18, 13, 8, 3, \
29, 24, 19, 14, 9, 4 )
```
## Clipping Range
Using the `rgblight_set_clipping_range()` function, you can prepare more buffers than the actual number of LEDs, and output some of the buffers to the LEDs. This is useful if you want the split keyboard to treat left and right LEDs as logically contiguous.
You can set the Clipping Range by executing the following code.
If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.
Steve Losh described the [Space Cadet Shift](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) quite well. Essentially, when you tap Left Shift on its own, you get an opening parenthesis; tap Right Shift on its own and you get the closing one. When held, the Shift keys function as normal. Yes, it's as cool as it sounds, and now even cooler supporting Control and Alt as well!
## Usage
Firstly, in your keymap, do one of the following:
- Replace the Left Shift key with `KC_LSPO` (Left Shift, Parenthesis Open), and Right Shift with `KC_RSPC` (Right Shift, Parenthesis Close).
- Replace the Left Control key with `KC_LCPO` (Left Control, Parenthesis Open), and Right Control with `KC_RCPC` (Right Control, Parenthesis Close).
- Replace the Left Alt key with `KC_LAPO` (Left Alt, Parenthesis Open), and Right Alt with `KC_RAPC` (Right Alt, Parenthesis Close).
- Replace any Shift key in your keymap with `KC_SFTENT` (Right Shift, Enter).
|`KC_LSPO` |Left Shift when held, `(` when tapped |
|`KC_RSPC` |Right Shift when held, `)` when tapped |
|`KC_LCPO` |Left Control when held, `(` when tapped |
|`KC_RCPC` |Right Control when held, `)` when tapped |
|`KC_LAPO` |Left Alt when held, `(` when tapped |
|`KC_RAPC` |Right Alt when held, `)` when tapped |
|`KC_SFTENT`|Right Shift when held, Enter when tapped |
## Caveats
Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. See the [Command feature](feature_command.md) for info on how to change it, or make sure that Command is disabled in your `rules.mk` with:
```make
COMMAND_ENABLE= no
```
## Configuration
By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`. In addition, you can redefine the modifier to send on tap, or even send no modifier at all. The new configuration defines bundle all options up into a single define of 3 key codes in this order: the `Modifier` when held or when used with other keys, the `Tap Modifer` sent when tapped (no modifier if `KC_TRNS`), finally the `Keycode` sent when tapped. Now keep in mind, mods from other keys will still apply to the `Keycode` if say `KC_RSFT` is held while tapping `KC_LSPO` key with `KC_TRNS` as the `Tap Modifer`.
|`LSPO_KEYS` |`KC_LSFT, LSPO_MOD, LSPO_KEY` |Send `KC_LSFT` when held, the mod and key defined by `LSPO_MOD` and `LSPO_KEY`. |
|`RSPC_KEYS` |`KC_RSFT, RSPC_MOD, RSPC_KEY` |Send `KC_RSFT` when held, the mod and key defined by `RSPC_MOD` and `RSPC_KEY`. |
|`LCPO_KEYS` |`KC_LCTL, KC_LSFT, KC_9` |Send `KC_LCTL` when held, the mod `KC_LSFT` with the key `KC_9` when tapped. |
|`RCPC_KEYS` |`KC_RCTL, KC_RSFT, KC_0` |Send `KC_RCTL` when held, the mod `KC_RSFT` with the key `KC_0` when tapped. |
|`LAPO_KEYS` |`KC_LALT, KC_LSFT, KC_9` |Send `KC_LALT` when held, the mod `KC_LSFT` with the key `KC_9` when tapped. |
|`RAPC_KEYS` |`KC_RALT, KC_RSFT, KC_0` |Send `KC_RALT` when held, the mod `KC_RSFT` with the key `KC_0` when tapped. |
|`SFTENT_KEYS` |`KC_RSFT, KC_TRNS, SFTENT_KEY` |Send `KC_RSFT` when held, no mod with the key `SFTENT_KEY` when tapped. |
## Obsolete Configuration
These defines are used in the above defines internally to support backwards compatibility, so you may continue to use them, however the above defines open up a larger range of flexibility than before. As an example, say you want to not send any modifier when you tap just `KC_LSPO`, with the old defines you had an all or nothing choice of using the `DISABLE_SPACE_CADET_MODIFIER` define. Now you can define that key as: `#define LSPO_KEYS KC_LSFT, KC_TRNS, KC_9`. This tells the system to set Left Shift if held or used with other keys, then on tap send no modifier (transparent) with the `KC_9`.
[Stenography](https://en.wikipedia.org/wiki/Stenotype) is a method of writing most often used by court reports, closed-captioning, and real-time transcription for the deaf. In stenography words are chorded syllable by syllable with a mixture of spelling, phonetic, and shortcut (briefs) strokes. Professional stenographers can reach 200-300 WPM without any of the strain usually found in standard typing and with far fewer errors (>99.9% accuracy).
The [Open Steno Project](http://www.openstenoproject.org/) has built an open-source program called Plover that provides real-time translation of steno strokes into words and commands. It has an established dictionary and supports
## Plover with QWERTY Keyboard
Plover can work with any standard QWERTY keyboard, although it is more efficient if the keyboard supports NKRO (n-key rollover) to allow Plover to see all the pressed keys at once. An example keymap for Plover can be found in `planck/keymaps/default`. Switching to the `PLOVER` layer adjusts the position of the keyboard to support the number bar.
To use Plover with QMK just enable NKRO and optionally adjust your layout if you have anything other than a standard layout. You may also want to purchase some steno-friendly keycaps to make it easier to hit multiple keys.
## Plover with Steno Protocol
Plover also understands the language of several steno machines. QMK can speak a couple of these languages, TX Bolt and GeminiPR. An example layout can be found in `planck/keymaps/steno`.
When QMK speaks to Plover over a steno protocol Plover will not use the keyboard as input. This means that you can switch back and forth between a standard keyboard and your steno keyboard, or even switch layers from Plover to standard and back without needing to activate/deactivate Plover.
In this mode Plover expects to speak with a steno machine over a serial port so QMK will present itself to the operating system as a virtual serial port in addition to a keyboard. By default QMK will speak the TX Bolt protocol but can be switched to GeminiPR; the last protocol used is stored in non-volatile memory so QMK will use the same protocol on restart.
> Note: Due to hardware limitations you may not be able to run both a virtual serial port and mouse emulation at the same time.
### TX Bolt
TX Bolt communicates the status of 24 keys over a very simple protocol in variable-sized (1-5 byte) packets.
### GeminiPR
GeminiPR encodes 42 keys into a 6-byte packet. While TX Bolt contains everything that is necessary for standard stenography, GeminiPR opens up many more options, including supporting non-English theories.
## Configuring QMK for Steno
Firstly, enable steno in your keymap's Makefile. You may also need disable mousekeys, extra keys, or another USB endpoint to prevent conflicts. The builtin USB stack for some processors only supports a certain number of USB endpoints and the virtual serial port needed for steno fills 3 of them.
```Makefile
STENO_ENABLE= yes
MOUSEKEY_ENABLE= no
```
In your keymap create a new layer for Plover. You will need to include `keymap_steno.h`. See `planck/keymaps/steno/keymap.c` for an example. Remember to create a key to switch to the layer as well as a key for exiting the layer. If you would like to switch modes on the fly you can use the keycodes `QK_STENO_BOLT` and `QK_STENO_GEMINI`. If you only want to use one of the protocols you may set it up in your initialization function:
```C
voidmatrix_init_user(){
steno_set_mode(STENO_MODE_GEMINI);// or STENO_MODE_BOLT
}
```
Once you have your keyboard flashed launch Plover. Click the 'Configure...' button. In the 'Machine' tab select the Stenotype Machine that corresponds to your desired protocol. Click the 'Configure...' button on this tab and enter the serial port or click 'Scan'. Baud rate is fine at 9600 (although you should be able to set as high as 115200 with no issues). Use the default settings for everything else (Data Bits: 8, Stop Bits: 1, Parity: N, no flow control).
On the display tab click 'Open stroke display'. With Plover disabled you should be able to hit keys on your keyboard and see them show up in the stroke display window. Use this to make sure you have set up your keymap correctly. You are now ready to steno!
* More resources at the Plover [Learning Stenography](https://github.com/openstenoproject/plover/wiki/Learning-Stenography) wiki
## Interfacing with the code
The steno code has three interceptible hooks. If you define these functions, they will be called at certain points in processing; if they return true, processing continues, otherwise it's assumed you handled things.
This function is called when a chord is about to be sent. Mode will be one of `STENO_MODE_BOLT` or `STENO_MODE_GEMINI`. This represents the actual chord that would be sent via whichever protocol. You can modify the chord provided to alter what gets sent. Remember to return true if you want the regular sending process to happen.
This function is called when a keypress has come in, before it is processed. The keycode should be one of `QK_STENO_BOLT`, `QK_STENO_GEMINI`, or one of the `STN_*` key values.
This function is called after a key has been processed, but before any decision about whether or not to send a chord. If `IS_PRESSED(record->event)` is false, and `pressed` is 0 or 1, the chord will be sent shortly, but has not yet been sent. This is where to put hooks for things like, say, live displays of steno chords or keys.
## Keycode Reference
As defined in `keymap_steno.h`.
> Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both.
The swap-hands action allows support for one-handed typing without requiring a separate layer. Set `SWAP_HANDS_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command key is pressed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd`
## Configuration
The configuration table is a simple 2-dimensional array to map from column/row to new column/row. Example `hand_swap_config` for Planck:
Note that the array indices are reversed same as the matrix and the values are of type `keypos_t` which is `{col, row}` and all values are zero-based. In the example above, `hand_swap_config[2][4]` (third row, fifth column) would return `{7, 2}` (third row, eighth column). Yes, this is confusing.
# Tap Dance: A Single Key Can Do 3, 5, or 100 Different Things
<!-- FIXME: Break this up into multiple sections -->
Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/qmk/qmk_firmware/pull/451). Here's how algernon describes the feature:
With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter.
To make it clear how this is different from `ACTION_FUNCTION_TAP`, let's explore a certain setup! We want one key to send `Space` on single tap, but `Enter` on double-tap.
With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be sent first. Thus, `SPC a` will result in `a SPC` being sent, if they are typed within `TAPPING_TERM`. With the tap dance feature, that'll come out as `SPC a`, correctly.
The implementation hooks into two parts of the system, to achieve this: into `process_record_quantum()`, and the matrix scan. We need the latter to be able to time out a tap sequence even when a key is not being pressed, so `SPC` alone will time out and register after `TAPPING_TERM` time.
But lets start with how to use it, first!
First, you will need `TAP_DANCE_ENABLE=yes` in your `rules.mk`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array.
This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are five possible options:
*`ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held.
*`ACTION_TAP_DANCE_DUAL_ROLE(kc, layer)`: Sends the `kc` keycode when tapped once, or moves to `layer`. (this functions like the `TO` layer keycode).
*`ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action.
*`ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function when the dance action finishes (like the previous option), and the last function when the tap dance action resets.
*`ACTION_TAP_DANCE_FN_ADVANCED_TIME(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn, tap_specific_tapping_term)`: This functions identically to the `ACTION_TAP_DANCE_FN_ADVANCED` function, but uses a custom tapping term for it, instead of the predefined `TAPPING_TERM`.
The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
!> Keep in mind that only [basic keycodes](keycodes_basic.md) are supported here. Custom keycodes are not supported.
And that's the bulk of it!
And now, on to the explanation of how it works!
The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer.
This means that you have `TAPPING_TERM` time to tap the key again, you do not have to input all the taps within that timeframe. This allows for longer tap counts, with minimal impact on responsiveness.
Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-dance keys.
For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros.
# Examples
## Simple Example
Here's a simple example for a single definition:
1. In your `rules.mk`, add `TAP_DANCE_ENABLE = yes`
2. In your `config.h` (which you can copy from `qmk_firmware/keyboards/planck/config.h` to your keymap directory), add `#define TAPPING_TERM 200`
3. In your `keymap.c` file, define the variables and definitions, then add to your keymap:
And then simply use `TD(X_CTL)` anywhere in your keymap.
If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`.
Below your layers and custom keycodes, add the following:
```c
// tapdance keycodes
enumtd_keycodes{
ALT_LP// Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance.
};
// define a type containing as many tapdance states as you need
typedefenum{
SINGLE_TAP,
SINGLE_HOLD,
DOUBLE_SINGLE_TAP
}td_state_t;
// create a global instance of the tapdance state type
statictd_state_ttd_state;
// declare your tapdance functions:
// function to determine the current tapdance state
intcur_dance(qk_tap_dance_state_t*state);
// `finished` and `reset` functions for each tapdance keycode
There are three Unicode keymap definition methods available in QMK:
## `UNICODE_ENABLE`
Supports Unicode up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji. The keycode function is `UC(c)` in the keymap, where _c_ is the code point's number (preferably hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
## `UNICODEMAP_ENABLE`
Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(i)`, where _i_ is an array index into the mapping table. The table may contain at most 16384 entries.
You may want to have an enum to make referencing easier. So, you could add something like this to your keymap file:
```c
enumunicode_names{
BANG,
IRONY,
SNEK,
};
constuint32_tPROGMEMunicode_map[]={
[BANG]=0x203D,// ‽
[IRONY]=0x2E2E,// ⸮
[SNEK]=0x1F40D,// 🐍
};
```
Then you can use `X(BANG)`, `X(SNEK)` etc. in your keymap.
### Lower and Upper Case
Characters often come in lower and upper case pairs, for example: å, Å. To make inputting these characters easier, you can use `XP(i, j)` in your keymap, where _i_ and _j_ are the mapping table indices of the lower and upper case character, respectively. If you're holding down Shift or have Caps Lock turned on when you press the key, the second (upper case) character will be inserted; otherwise, the first (lower case) version will appear.
This is most useful when creating a keymap for an international layout with special characters. Instead of having to put the lower and upper case versions of a character on separate keys, you can have them both on the same key by using `XP`. This blends Unicode keys in with regular alphas.
Due to keycode size constraints, _i_ and _j_ can each only refer to one of the first 128 characters in your `unicode_map`. In other words, 0 ≤ _i_ ≤ 127 and 0 ≤ _j_ ≤ 127. This is enough for most use cases, but if you'd like to customize the index calculation, you can override the [`unicodemap_index()`](https://github.com/qmk/qmk_firmware/blob/71f640d47ee12c862c798e1f56392853c7b1c1a8/quantum/process_keycode/process_unicodemap.c#L40) function. This also allows you to, say, check Ctrl instead of Shift/Caps.
## `UCIS_ENABLE`
Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you have to add a keycode or function that calls `qk_ucis_start()`. Once this function has been called, you can type the corresponding mnemonic for your character, then hit Space or Enter to complete it, or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode character inserted.
For instance, you could define a table like this in your keymap file:
To use it, call `qk_ucis_start()`, then type "rofl" and hit Enter. QMK should erase the "rofl" text and insert the laughing emoji.
### Customization
There are several functions that you can define in your keymap to customize the functionality of this feature.
*`void qk_ucis_start_user(void)`– This runs when you call the "start" function, and can be used to provide feedback. By default, it types out a keyboard emoji.
*`void qk_ucis_success(uint8_t symbol_index)`– This runs when the input has matched something and has completed. By default, it doesn't do anything.
*`void qk_ucis_symbol_fallback (void)`– This runs when the input doesn't match anything. By default, it falls back to trying that input as a Unicode code.
You can find the default implementations of these functions in [`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c).
## Input Modes
Unicode input in QMK works by inputting a sequence of characters to the OS, sort of like a macro. Unfortunately, the way this is done differs for each platform. Specifically, each platform requires a different combination of keys to trigger Unicode input. Therefore, a corresponding input mode has to be set in QMK.
The following input modes are available:
* **`UC_OSX`**: macOS built-in Unicode hex input. Supports code points up to `0xFFFF` (`0x10FFFF` with `UNICODEMAP`).
To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
By default, this mode uses the left Option key (`KC_LALT`) for Unicode input, but this can be changed by defining [`UNICODE_KEY_OSX`](#input-key-configuration) with another keycode.
!> Using the _Unicode Hex Input_ input source may disable some Option based shortcuts, such as Option + Left Arrow and Option + Right Arrow.
* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports code points up to `0x10FFFF` (all possible code points).
Enabled by default and works almost anywhere on IBus-enabled distros. Without IBus, this mode works under GTK apps, but rarely anywhere else.
By default, this mode uses Ctrl+Shift+U (`LCTL(LSFT(KC_U))`) to start Unicode input, but this can be changed by defining [`UNICODE_KEY_LNX`](#input-key-configuration) with another keycode. This might be required for IBus versions ≥1.5.15, where Ctrl+Shift+U behavior is consolidated into Ctrl+Shift+E.
* **`UC_WIN`**: _(not recommended)_ Windows built-in hex numpad Unicode input. Supports code points up to `0xFFFF`.
To enable, create a registry key under `HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad` of type `REG_SZ` called `EnableHexNumpad` and set its value to `1`. This can be done from the Command Prompt by running `reg add "HKCU\Control Panel\Input Method" -v EnableHexNumpad -t REG_SZ -d 1` with administrator privileges. Reboot afterwards.
This mode is not recommended because of reliability and compatibility issues; use the `UC_WINC` mode instead.
* **`UC_BSD`**: _(non implemented)_ Unicode input under BSD. Not implemented at this time. If you're a BSD user and want to help add support for it, please [open an issue on GitHub](https://github.com/qmk/qmk_firmware/issues).
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.9.0, supports code points up to `0x10FFFF` (all possible code points).
To enable, install the [latest release](https://github.com/samhocevar/wincompose/releases/latest). Once installed, WinCompose will automatically run on startup. Works reliably under all version of Windows supported by the app.
By default, this mode uses right Alt (`KC_RALT`) as the Compose key, but this can be changed in the WinCompose settings and by defining [`UNICODE_KEY_WINC`](#input-key-configuration) with another keycode.
### Switching Input Modes
There are two ways to set the input mode for Unicode: by keycode or by function. Keep in mind that both methods write to persistent storage (EEPROM), and are loaded each time the keyboard starts. So once you've set it the first time, you don't need to set it again unless you want to change it, or you've reset the EEPROM settings.
You can switch the input mode at any time by using one of the following keycodes. The easiest way is to add the ones you use to your keymap.
|`UNICODE_MODE_FORWARD`|`UC_MOD` |Next in list|[Cycle](#input-mode-cycling) through selected modes |
|`UNICODE_MODE_REVERSE`|`UC_RMOD`|Prev in list|[Cycle](#input-mode-cycling) through selected modes in reverse|
|`UNICODE_MODE_OSX` |`UC_M_OS`|`UC_OSX` |Switch to macOS input |
|`UNICODE_MODE_LNX` |`UC_M_LN`|`UC_LNX` |Switch to Linux input |
|`UNICODE_MODE_WIN` |`UC_M_WI`|`UC_WIN` |Switch to Windows input |
|`UNICODE_MODE_BSD` |`UC_M_BS`|`UC_BSD` |Switch to BSD input (not implemented) |
|`UNICODE_MODE_WINC` |`UC_M_WC`|`UC_WINC` |Switch to Windows input using WinCompose |
You can also switch the input mode by calling `set_unicode_input_mode(x)` in your code, where _x_ is one of the above input mode constants (e.g. `UC_LNX`). Since the function only needs to be called once, it's recommended that you do it in `eeconfig_init_user()` (or a similar function). For example:
```c
voideeconfig_init_user(void){
set_unicode_input_mode(UC_LNX);
}
```
### Audio Feedback
If you have the [Audio feature](feature_audio.md) enabled on the board, you can set melodies to be played when you press the above keys. That way you can have some audio feedback when switching input modes.
For instance, you can add these definitions to your `config.h` file:
```c
#define UNICODE_SONG_OSX COIN_SOUND
#define UNICODE_SONG_LNX UNICODE_LINUX
#define UNICODE_SONG_BSD MARIO_GAMEOVER
#define UNICODE_SONG_WIN UNICODE_WINDOWS
#define UNICODE_SONG_WINC UNICODE_WINDOWS
```
### Additional Customization
Because Unicode is a large and versatile feature, there are a number of options you can customize to make it work better on your system.
#### Start and Finish Input Functions
The functions for starting and finishing Unicode input on your platform can be overridden locally. Possible uses include customizing input mode behavior if you don't use the default keys, or adding extra visual/audio feedback to Unicode input.
*`void unicode_input_start(void)`– This sends the initial sequence that tells your platform to enter Unicode input mode. For example, it presses Ctrl+Shift+U on Linux and holds the Option key on macOS.
*`void unicode_input_finish(void)`– This is called to exit Unicode input mode, for example by pressing Space or releasing the Option key.
You can find the default implementations of these functions in [`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c).
#### Input Key Configuration
You can customize the keys used to trigger Unicode input for macOS, Linux and WinCompose by adding corresponding defines to your `config.h`. The default values match the platforms' default settings, so you shouldn't need to change this unless Unicode input isn't working, or you want to use a different key (e.g. in order to free up left or right Alt).
You can choose which input modes are available for cycling through. By default, this is disabled. If you want to enable it, limiting it to just the modes you use makes sense. Note that the values in the list are comma-delimited.
You can cycle through the selected modes by using the `UC_MOD`/`UC_RMOD` keycodes, or by calling `cycle_unicode_input_mode(offset)` in your code (`offset` is how many modes to move forward by, so +1 corresponds to `UC_MOD`).
By default, when the keyboard boots, it will initialize the input mode to the last one you used. You can disable this and make it start with the first mode in the list every time by adding the following to your `config.h`:
```c
#define UNICODE_CYCLE_PERSIST false
```
!> Using `UNICODE_SELECTED_MODES` means you don't have to initially set the input mode in `matrix_init_user()` (or a similar function); the Unicode system will do that for you on startup. This has the added benefit of avoiding unnecessary writes to EEPROM.
## `send_unicode_hex_string`
To type multiple characters for things like (ノಠ痊ಠ)ノ彡┻━┻, you can use `send_unicode_hex_string()` much like `SEND_STRING()` except you would use hex values separate by spaces.
For example, the table flip seen above would be `send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B")`
There are many ways to get a hex code, but an easy one is [this site](https://r12a.github.io/app-conversion/). Just make sure to convert to hexadecimal, and that is your string.
## Additional Language Support
In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware.
## International Characters on Windows
### AutoHotkey allows Windows users to create custom hotkeys among others.
The method does not require Unicode support in the keyboard itself but depends instead of [AutoHotkey](https://autohotkey.com) running in the background.
First you need to select a modifier combination that is not in use by any of your programs.
CtrlAltWin is not used very widely and should therefore be perfect for this.
There is a macro defined for a mod-tab combo `LCAG_T`.
Add this mod-tab combo to a key on your keyboard, e.g.: `LCAG_T(KC_TAB)`.
This makes the key behave like a tab key if pressed and released immediately but changes it to the modifier if used with another key.
In the default script of AutoHotkey you can define custom hotkeys.
<^<!<#a::Send, ä
<^<!<#<+a::Send, Ä
The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a.
AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
### US International
If you enable the US International layout on the system, it will use punctuation to accent the characters.
For instance, typing "`a" will result in à.
You can find details on how to enable this [here](https://support.microsoft.com/en-us/help/17424/windows-change-keyboard-layout).
If you use more than one keyboard with a similar keymap, you might see the benefit in being able to share code between them. Create your own folder in `users/` named the same as your keymap (ideally your github username, `<name>`) with the following structure:
*`/users/<name>/` (added to the path automatically)
*`readme.md`
*`readme.md` (optional, recommended)
*`rules.mk` (included automatically)
*`config.h` (included automatically)
*`<name>.h` (optional)
*`<name>.c` (optional)
*`cool_rgb_stuff.c` (optional)
*`cool_rgb_stuff.h` (optional)
`<name>.c` will need to be added to the SRC in `rules.mk` like this:
SRC += <name>.c
Additional files may be added in the same way - it's recommended you have one named `<name>`.c/.h though.
All this only happens when you build a keymap named `<name>`, like this:
make planck:<name>
For example,
For example,
make planck:jack
Will include the `/users/jack/` folder in the path, along with `/users/jack/rules.mk`.
Will include the `/users/jack/` folder in the path, along with `/users/jack/rules.mk`.
## Readme
!> This `name` can be [overridden](#override-default-userspace), if needed.
## `Rules.mk`
The `rules.mk` is one of the two files that gets processed automatically. This is how you add additional source files (such as `<name>.c`) will be added when compiling.
It's highly recommended that you use `<name>.c` as the default source file to be added. And to add it, you need to add it the SRC in `rules.mk` like this:
SRC += <name>.c
Additional files may be added in the same way - it's recommended you have one named `<name>`.c/.h to start off with, though.
The `/users/<name>/rules.mk` file will be included in the build _after_ the `rules.mk` from your keymap. This allows you to have features in your userspace `rules.mk` that depend on individual QMK features that may or may not be available on a specific keyboard.
For example, if you have RGB control features shared between all your keyboards that support RGB lighting, you can add support for that if the RGBLIGHT feature is enabled:
```make
ifeq($(strip$(RGBLIGHT_ENABLE)),yes)
# Include my fancy rgb functions source here
SRC+= cool_rgb_stuff.c
endif
```
Alternatively, you can `define RGB_ENABLE` in your keymap's `rules.mk` and then check for the variable in your userspace's `rules.mk` like this:
```make
ifdefRGB_ENABLE
# Include my fancy rgb functions source here
SRC+= cool_rgb_stuff.c
endif
```
### Override default userspace
By default the userspace used will be the same as the keymap name. In some situations this isn't desirable. For instance, if you use the [layout](feature_layouts.md) feature you can't use the same name for different keymaps (e.g. ANSI and ISO). You can name your layouts `mylayout-ansi` and `mylayout-iso` and add the following line to your layout's `rules.mk`:
```
USER_NAME := mylayout
```
This is also useful if you have multiple different keyboards with different features physically present on the board (such as one with RGB Lights, and one with Audio, or different number of LEDs, or connected to a different PIN on the controller).
## Configuration Options (`config.h`)
Additionally, `config.h` here will be processed like the same file in your keymap folder. This is handled separately from the `<name>.h` file.
The reason for this, is that `<name>.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `<name.h>` file in any `config.h` files will result in compile issues.
!>You should use the `config.h` for [configuration options](config_options.md), and the `<name>.h` file for user or keymap specific settings (such as the enum for layer or keycodes)
## Readme (`readme.md`)
Please include authorship (your name, github username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses).
For a brief example, checkout `/users/_example/` until we have more reasonable and useful examples.
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/>.
```
You'd want to replace the year, name, email and github username with your info.
Additionally, this is a good place to document your code, if you wish to share it with others.
# Examples
For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace.
## Customized Functions
QMK has a bunch of [functions](custom_quantum_functions.md) that have [`_quantum`, `_kb`, and `_user` versions](custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap) that you can use. You will pretty much always want to use the user version of these functions. But the problem is that if you use them in your userspace, then you don't have a version that you can use in your keymap.
However, you can actually add support for keymap version, so that you can use it in both your userspace and your keymap!
For instance, lets looks at the `layer_state_set_user` function. Lets enable the [Tri Layer State](ref_functions.md#olkb-tri-layers) functionalitly to all of our boards, and then still have your `keymap.c` still able to use this functionality.
In your `<name.c>` file, you'd want to add this:
```c
__attribute__((weak))
uint32_tlayer_state_set_keymap(uint32_tstate){
returnstate;
}
uint32_tlayer_state_set_user(uint32_tstate){
state=update_tri_layer_state(state,2,3,5);
returnlayer_state_set_keymap(state);
}
```
The `__attribute__ ((weak))` part tells the compiler that this is a placeholder function that can then be replaced by a version in your `keymap.c`. That way, you don't need to add it to your `keymap.c`, but if you do, you won't get any conflicts because the function is the same name.
The `_keymap` part here doesn't matter, it just needs to be something other than `_quantum`, `_kb`, or `_user`, since those are already in use. So you could use `layer_state_set_mine`, `layer_state_set_fn`, or anything else.
You can see a list of this and other common functions in [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in [`users/drashna`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
## Custom Features
Since the Userspace feature can support a staggering number of boards, you may have boards that you want to enable certain functionality for, but not for others. And you can actually create "features" that you can enable or disable in your own userspace.
For instance, if you wanted to have a bunch of macros available, but only on certain boards (to save space), you could "hide" them being a `#ifdef MACROS_ENABLED`, and then enable it per board. To do this, add this to your rules.mk
```make
ifeq($(strip$(MACROS_ENABLED)),yes)
OPT_DEFS+= -DMACROS_ENABLED
endif
```
The `OPT_DEFS` setting causes `MACROS_ENABLED` to be defined for your keyboards (note the `-D` in front of the name), and you could use `#ifdef MACROS_ENABLED` to check the status in your c/h files, and handle that code based on that.
Then you add `MACROS_ENABLED = yes` to the `rules.mk` for you keymap to enable this feature and the code in your userspace.
And in your `process_record_user` function, you'd do something like this:
If you wanted to consolidate macros and other functions into your userspace for all of your keymaps, you can do that. This builds upon the [Customized Functions](#customized-functions) example above. This lets you maintain a bunch of macros that are shared between the different keyboards, and allow for keyboard specific macros, too.
First, you'd want to go through all of your `keymap.c` files and replace `process_record_user` with `process_record_keymap` instead. This way, you can still use keyboard specific codes on those boards, and use your custom "global" keycodes as well. You'll also want to replace `SAFE_RANGE` with `NEW_SAFE_RANGE` so that you wont have any overlapping keycodes
Then add `#include <name.h>` to all of your keymap.c files. This allows you to use these new keycodes without having to redefine them in each keymap.
Once you've done that, you'll want to set the keycode definitions that you need to the `<name>.h` file. For instance:
```c
#pragma once
#include"quantum.h"
#include"action.h"
#include"version.h"
// Define all of
enumcustom_keycodes{
KC_MAKE=SAFE_RANGE,
NEW_SAFE_RANGE//use "NEW_SAFE_RANGE" for keymap specific codes
};
```
Now you want to create the `<name>.c` file, and add this content to it:
caseKC_MAKE:// Compiles the firmware, and adds the flash command based on keyboard bootloader
if(!record->event.pressed){
uint8_ttemp_mod=get_mods();
uint8_ttemp_osm=get_oneshot_mods();
clear_mods();clear_oneshot_mods();
SEND_STRING("make "QMK_KEYBOARD":"QMK_KEYMAP);
#ifndef FLASH_BOOTLOADER
if((temp_mod|temp_osm)&MOD_MASK_SHIFT)
#endif
{//
#if defined(__arm__) // only run for ARM boards
SEND_STRING(":dfu-util");
#elif defined(BOOTLOADER_DFU) // only run for DFU boards
SEND_STRING(":dfu");
#elif defined(BOOTLOADER_HALFKAY) // only run for teensy boards
SEND_STRING(":teensy");
#elif defined(BOOTLOADER_CATERINA) // only run for Pro Micros
SEND_STRING(":avrdude");
#endif // bootloader options
}
if((temp_mod|temp_osm)&MOD_MASK_CTRL){
SEND_STRING(" -j8 --output-sync");
}
SEND_STRING(SS_TAP(X_ENTER));
set_mods(temp_mod);
}
break;
}
returnprocess_record_keymap(keycode,record);
}
```
For boards that may not have a shift button (such as on a macro pad), we need a way to always include the bootloader option. To do that, add the following to the `rules.mk` in your userspace folder:
```make
ifeq ($(strip $(FLASH_BOOTLOADER)), yes)
OPT_DEFS += -DFLASH_BOOTLOADER
endif
```
This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make <keyboard>:<keymap>`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time.
Also, holding `shift` will add the appropriate flashing command (`:dfu`, `:teensy`, `:avrdude`, `:dfu-util`) for a majority of keyboards. Holding `control` will add some commands that will speed up compiling time by processing multiple files at once.
And for the boards that lack a shift key, or that you want to always attempt the flashing part, you can add `FLASH_BOOTLOADER = yes` to the `rules.mk` of that keymap.
?> This should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely. And this doesn't support BootloadHID or mdloader.
Velocikey is a feature that lets you control the speed of lighting effects (like the Rainbow Swirl effect) with the speed of your typing. The faster you type, the faster the lights will go!
## Usage
For Velocikey to take effect, there are two steps. First, when compiling your keyboard, you'll need to set `VELOCIKEY_ENABLE=yes` in `rules.mk`, e.g.:
```
BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
STENO_ENABLE = no
EXTRAKEY_ENABLE = yes
VELOCIKEY_ENABLE = yes
```
Then, while using your keyboard, you need to also turn it on with the VLK_TOG keycode, which toggles the feature on and off.
The following light effects will all be controlled by Velocikey when it is enabled:
- RGB Breathing
- RGB Rainbow Mood
- RGB Rainbow Swirl
- RGB Snake
- RGB Knight
Support for LED breathing effects is planned but not available yet.
As long as Velocikey is enabled, it will control the speed regardless of any other speed setting that your RGB lights are currently on.
## Configuration
Velocikey doesn't currently support any configuration via keyboard settings. If you want to adjust something like the speed increase or decay rate, you would need to edit `velocikey.c` and adjust the values there to achieve the kinds of speeds that you like.
QMK has a staggering number of features for building your keyboard. It can take some time to understand all of them and determine which one will achieve your goal.
## Space Cadet Shift: The future, built in
Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. Head on over to the [Space Cadet Shift](space_cadet_shift.md) page to read about it.
## The Leader key: A new kind of modifier
Most modifiers have to be held or toggled. But what if you had a key that indicated the start of a sequence? You could press that key and then rapidly press 1-3 more keys to trigger a macro, or enter a special layer, or anything else you might want to do. To learn more about it check out the [Leader Key](feature_leader_key.md) page.
## Tap Dance: A single key can do 3, 5, or 100 different things
Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. Read more about it on the [Tap Dance](tap_dance.md) page.
## Temporarily setting the default layer
`DF(layer)` - sets default layer to _layer_. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
## Macro shortcuts: Send a whole string when pressing just one key
How would you like a single keypress to send a whole word, sentence, paragraph, or even document? Head on over to the [Macros](macros.md) page to read up on all aspects of Simple and Dynamic Macros.
## Additional keycode aliases for software-implemented layouts \(Colemak, Dvorak, etc\)
Everything is assuming you're in Qwerty \(in software\) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
```
#include <keymap_colemak.h>
```
If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to:
*`CM_*` for all of the Colemak-equivalent characters
*`DV_*` for all of the Dvorak-equivalent characters
These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F`. Using `KC_F` under these same circumstances would result in `T`.
## Backlight Breathing
In order to enable backlight breathing, the following line must be added to your config.h file.
```
#define BACKLIGHT_BREATHING
```
The following function calls are used to control the breathing effect.
*`breathing_enable()` - Enable the free-running breathing effect.
*`breathing_disable()` - Disable the free-running breathing effect immediately.
*`breathing_self_disable()` - Disable the free-running breathing effect after the current effect ends.
*`breathing_toggle()` - Toggle the free-running breathing effect.
*`breathing_defaults()` - Reset the speed and brightness settings of the breathing effect.
The following function calls are used to control the maximum brightness of the breathing effect.
*`breathing_intensity_set(value)` - Set the brightness of the breathing effect when it is at its max value.
*`breathing_intensity_default()` - Reset the brightness of the breathing effect to the default value based on the current backlight intensity.
The following function calls are used to control the cycling speed of the breathing effect.
*`breathing_speed_set(value)` - Set the speed of the breathing effect - how fast it cycles.
*`breathing_speed_inc(value)` - Increase the speed of the breathing effect by a fixed value.
*`breathing_speed_dec(value)` - Decrease the speed of the breathing effect by a fixed value.
*`breathing_speed_default()` - Reset the speed of the breathing effect to the default value.
The following example shows how to enable the backlight breathing effect when the FUNCTION layer macro button is pressed:
```
case MACRO_FUNCTION:
if (record->event.pressed)
{
breathing_speed_set(3);
breathing_enable();
layer_on(LAYER_FUNCTION);
}
else
{
breathing_speed_set(1);
breathing_self_disable();
layer_off(LAYER_FUNCTION);
}
break;
```
The following example shows how to pulse the backlight on-off-on when the RAISED layer macro button is pressed:
* [Grave Escape](feature_grave_esc.md) - Lets you use a single key for Esc and Grave.
* [HD44780 LCD Display](feature_hd44780.md) - Support for LCD character displays using the HD44780 standard.
* [Key Lock](feature_key_lock.md) - Lock a key in the "down" state.
* [Layouts](feature_layouts.md) - Use one keymap with any keyboard that supports your layout.
* [Leader Key](feature_leader_key.md) - Tap the leader key followed by a sequence to trigger custom behavior.
* [LED Matrix](feature_led_matrix.md) - LED Matrix single color lights for per key lighting (Single Color, not RGB).
* [Macros](feature_macros.md) - Send multiple key presses when pressing only one physical key.
* [Mouse keys](feature_mouse_keys.md) - Control your mouse pointer from your keyboard.
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) - Sticky Keys, lets hit a key rather than holding it.
* [Pointing Device](feature_pointing_device.md) - Framework for connecting your custom pointing device to your keyboard.
* [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard.
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
* [RGB Matrix](feature_rgb_matrix.md) - RGB Matrix lights for per key lighting.
* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
* [Swap Hands](feature_swap_hands.md) - Mirror your keyboard for one handed usage.
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
* [Terminal](feature_terminal.md) - CLI interface to the internals of your keyboard.
* [Thermal Printer](feature_thermal_printer.md) - Connect a thermal printer to your keyboard to be able to toggle on a printed log of everything you type.
# Flashing Instructions and Bootloader Information
There are quite a few different types of bootloaders that keyboards use, and just about all of the use a different flashing method. Luckily, projects like the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) aim to be compatible with all the different types without having to think about it much, but this article will describe the different types of bootloaders, and available methods for flashing them.
If you have a bootloader selected with the `BOOTLOADER` variable in your `rules.mk`, QMK will automatically calculate if your .hex file is the right size to be flashed to the device, and output the total size in bytes (along with the max). To run this process manually, compile with the target `check-size`, eg `make planck/rev4:default:check-size`.
## DFU
Atmel's DFU bootloader comes on all atmega32u4 chips by default, and is used by many keyboards that have their own ICs on their PCBs (Older OLKB boards, Clueboards). Some keyboards may also use LUFA's DFU bootloader (or QMK's fork) (Newer OLKB boards) that adds in additional features specific to that hardware.
To ensure compatibility with the DFU bootloader, make sure this block is present your `rules.mk` (optionally with `lufa-dfu` or `qmk-dfu` instead):
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
1. Press the `RESET` keycode, or tap the RESET button (or short RST to GND).
2. Wait for the OS to detect the device
3. Erase the memory (may be done automatically)
4. Flash a .hex file
5. Reset the device into application mode (may be done automatically)
or:
make <keyboard>:<keymap>:dfu
### QMK DFU
QMK has a fork of the LUFA DFU bootloader that allows for a simple matrix scan for exiting the bootloader and returning to the application, as well as flashing an LED/making a ticking noise with a speaker when things are happening. To enable these features, use this block in your `config.h` (The key that exits the bootloader needs to be hooked-up to the INPUT and OUTPUT defined here):
#define QMK_ESC_OUTPUT F1 // usually COL
#define QMK_ESC_INPUT D5 // usually ROW
#define QMK_LED E6
#define QMK_SPEAKER C6
The Manufacturer and Product names are automatically pulled from your `config.h`, and "Bootloader" is added to the product.
To generate this bootloader, use the `bootloader` target, eg `make planck/rev4:default:bootloader`.
To generate a production-ready .hex file (containing the application and the bootloader), use the `production` target, eg `make planck/rev4:default:production`.
### DFU commands
There are a number of DFU commands that you can use to flash firmware to a DFU device:
*`:dfu` - This is the normal option and waits until a DFU device is available, and then flashes the firmware. This will check every 5 seconds, to see if a DFU device has appeared.
*`:dfu-ee` - This flashes an `eep` file instead of the normal hex. This is uncommon.
*`:dfu-split-left` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
*`:dfu-split-right` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
## Caterina
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
To ensure compatibility with the Caterina bootloader, make sure this block is present your `rules.mk`:
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters)
2. Wait for the OS to detect the device
3. Flash a .hex file
4. Reset the device into application mode (may be done automatically)
## STM32
All STM32 chips come preloaded with a factory bootloader that cannot be modified nor deleted. Some STM32 chips have bootloaders that do not come with USB programming (e.g. STM32F103) but the process is still the same.
At the moment, no `BOOTLOADER` variable is needed on `rules.mk` for STM32.
1. Enter the bootloader using any of the following methods:
* Tap the `RESET` keycode (may not work on STM32F042 devices)
* If a reset circuit is present, tap the RESET button
* Otherwise, you need to bridge BOOT0 to VCC (via BOOT0 button or bridge), short RESET to GND (via RESET button or bridge), and then let go of the BOOT0 bridge
2. Wait for the OS to detect the device
3. Flash a .bin file
* You will receive a warning about the DFU signature; Just ignore it
4. Reset the device into application mode (may be done automatically)
* If you are building from command line (e.g. `make planck/rev6:default:dfu-util`), make sure that `:leave` is passed to the `DFU_ARGS` variable inside your `rules.mk` (e.g. `DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) so that your device resets after flashing
### STM32 Commands
There are a number of DFU commands that you can use to flash firmware to a STM32 device:
*`:dfu-util` - The default command for flashing to STM32 devices.
*`:dfu-util-wait` - This works like the default command, but it gives you a (configurable) 10 second timeout before it attempts to flash the firmware. You can use `TIME_DELAY=20` from the command line to change the timeout.
This page describes setting up the build environment for QMK. These instructions cover AVR processors (such as the atmega32u4.)
This page describes setting up the build environment for QMK. These instructions cover AVR processors (such as the atmega32u4).
<!-- FIXME: We should have ARM instructions somewhere. -->
**Note:** If this is your first time here, check out the [Complete Newbs Guide](newbs.md) page.
Before continuing, double check that your submodules (third-party libraries) are up to date by running `make git-submodule`.
## Linux
To ensure you are always up to date, you can just run `sudo util/install_dependencies.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.**
To ensure you are always up to date, you can just run `sudo util/qmk_install.sh`. That should always install all the dependencies needed. **This will run `apt-get upgrade`.**
You can also install things manually, but this documentation might not be always up to date with all requirements.
@@ -31,11 +35,19 @@ git
Install the dependencies with your favorite package manager.
If you're on [NixOS](https://nixos.org/), or have Nix installed on Linux or macOS, run `nix-shell` from the repository root to get a build environment.
@@ -44,27 +56,30 @@ By default, this will download compilers for both AVR and ARM. If you don't need
nix-shell --arg arm false
## Mac
## macOS
If you're using [homebrew,](http://brew.sh/) you can use the following commands:
brew tap osx-cross/avr
brew tap PX4/homebrew-px4
brew update
brew install avr-gcc
brew install avr-gcc@7
brew link --force avr-gcc@7
brew install dfu-programmer
brew install dfu-util
brew install gcc-arm-none-eabi
brew install avrdude
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of avr-libc can take over 20 minutes and exhibit high CPU usage.
This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@7` can take over 20 minutes and exhibit high CPU usage.
## Windows with msys2 (recommended)
The best environment to use, for Windows Vista through any later version (tested on 7 and 10,) is [msys2](http://www.msys2.org).
The best environment to use, for Windows Vista through any later version (tested on 7 and 10), is [msys2](http://www.msys2.org).
* Install msys2 by downloading and following the instructions here: http://www.msys2.org
* Open the "MSYS2 MingGW 64-bit" shortcut
* Navigate to your qmk checkout. For example, if it's in the root of your c drive:
* Install msys2 by downloading it and following the instructions here: http://www.msys2.org
* Open the ``MSYS2 MingGW 64-bit`` shortcut
* Navigate to your QMK repository. For example, if it's in the root of your c drive:
*`$ cd /c/qmk_firmware`
* Run `util/msys2_install.sh` and follow the prompts
* Run `util/qmk_install.sh` and follow the prompts
## Windows 10 (deprecated)
These are the old instructions for Windows 10. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
@@ -78,26 +93,26 @@ In addition to the Creators Update, you need Windows 10 Subystem for Linux, so i
### Git
If you already have cloned the repository on your Windows file system you can ignore this section.
You will need to clone the repository to your Windows file system using the normal Git for Windows and **not** the WSL Git. So if you haven't installed Git before, [download](https://git-scm.com/download/win) and install it. Then [set it up](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup), it's important that you setup the e-mail and user name, especially if you are planning to contribute.
You will need to clone the repository to your Windows file system using the normal Git for Windows and **not** the WSL Git. So if you haven't installed Git before, [download](https://git-scm.com/download/win) and install it. Then [set it up](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup), it's important that you setup the e-mail and user name, especially if you are planning to contribute.
Once Git is installed, open the Git bash command and change the directory to where you want to clone QMK, note that you have to use forward slashes, and that your c drive is accessed like this `/c/path/to/where/you/want/to/go`. Then run `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`, this will create a new folder `qmk_firmware` as a subfolder of the current one.
Once Git is installed, open the Git Bash command and change the directory to where you want to clone QMK; note that you have to use forward slashes, and that your c drive is accessed like this `/c/path/to/where/you/want/to/go`. Then run `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`, this will create a new folder `qmk_firmware` as a subfolder of the current one.
### Toolchain setup
### Toolchain Setup
The Toolchain setup is done through the Windows Subsystem for Linux, and the process is fully automated. If you want to do everything manually, there are no other instructions than the scripts themselves, but you can always open issues and ask for more information.
1. Open "Bash On Ubuntu On Windows" from the start menu.
2. Go to the directory where you cloned `qmk_firmware`. Note that the paths start with `/mnt/` in the WSL, so you have to write for example `cd /mnt/c/path/to/qmk_firmware`.
1. Open "Bash On Ubuntu On Windows" from the start menu.
2. Go to the directory where you cloned `qmk_firmware`. Note that the paths start with `/mnt/` in the WSL, so you have to write for example `cd /mnt/c/path/to/qmk_firmware`.
3. Run `util/wsl_install.sh` and follow the on-screen instructions.
4. Close the Bash command window, and re-open it.
5. You are ready to compile and flash the firmware!
### Some important things to keep in mind
### Some Important Things to Keep in Mind
* You can run `util/wsl_install.sh` again to get all the newest updates.
* Your QMK repository need to be on a Windows file system path, since WSL can't run executables outside it.
* The WSL Git is **not** compatible with the Windows Git, so use the Windows Git Bash or a windows Git GUI for all Git operations
* You can edit files either inside WSL or normally using Windows, but note that if you edit makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work.
## Windows (Vista and later) (Deprecated)
## Windows (Vista and Later) (Deprecated)
These are the old instructions for Windows Vista and later. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
@@ -114,21 +129,27 @@ If you have trouble and want to ask for help, it is useful to generate a *Win_Ch
## Docker
If this is a bit complex for you, Docker might be the turn-key solution you need. After installing [Docker](https://www.docker.com/products/docker), run the following command at the root of the QMK folder to build a keyboard/keymap:
If this is a bit complex for you, Docker might be the turnkey solution you need. After installing [Docker CE](https://docs.docker.com/install/#supported-platforms), run the following command from the `qmk_firmware` directory to build a keyboard/keymap:
```bash
# You'll run this every time you want to build a keymap
# modify the keymap and keyboard assigment to compile what you want
# defaults are ergodox/default
docker run -e keymap=gwen -e keyboard=ergodox_ez --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware
# On windows docker seems to have issue with VOLUME tag in Dockerfile, and $('pwd') won't print a windows compliant path, use full path instead like this
docker run -e keymap=default -e keyboard=ergobox_ez --rm -v D:/Users/Sacapuces/Documents/Repositories/qmk:/qmk:rw edasque/qmk_firmware
util/docker_build.sh keyboard:keymap
# For example: util/docker_build.sh ergodox_ez:steno
```
This will compile the desired keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, the `default` keymap is used. Note that the parameter format is the same as when building with `make`.
You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use:
```bash
util/docker_build.sh
# Reads parameters as input (leave blank for defaults)
```
This will compile the targeted keyboard/keymap and leave it in your QMK directory for you to flash.
There is also support for building _and_ flashing the keyboard straight from Docker by specifying the `target` as well:
```bash
util/docker_build.sh keyboard:keymap:target
# For example: util/docker_build.sh planck/rev6:default:dfu-util
```
If you're on Linux, this should work out of the box. On Windows and macOS, it requires [Docker Machine](http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos/) to be running. This is tedious to set up, so it's not recommended; use [QMK Toolbox](https://github.com/qmk/qmk_toolbox) instead.
!> Docker for Windows requires [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v) to be enabled. This means that it cannot work on versions of Windows which don't have Hyper-V, such as Windows 7, Windows 8 and **Windows 10 Home**.
## Vagrant
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](vagrant_guide.md).
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](getting_started_vagrant.md).
There are a lot of resources for getting help with QMK.
## Realtime Chat
You can find QMK developers and users on our main [Discord server](https://discord.gg/Uq7gcHh). There are specific channels in the server for chatting about the firmware, Toolbox, hardware, and configurator.
## OLKB Subreddit
The official QMK forum is [/r/olkb](https://reddit.com/r/olkb) on [reddit.com](https://reddit.com).
## Github Issues
You can open an [issue on GitHub](https://github.com/qmk/qmk_firmware/issues). This is especially handy when your issue will require long-term discussion or debugging.
Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
{% hint style='info' %}
This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system.
{% endhint %}
?> This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system.
Start on the [QMK Github page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork":

If you're apart of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button:
If you're apart of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button:

@@ -21,8 +19,7 @@ And be sure to select "HTTPS", and select the link and copy it:
From here, enter `git clone ` into the command line, and then paste your link:
@@ -35,13 +32,12 @@ Checking out files: 100% (2799/2799), done.
You now have your QMK fork on your local machine, and you can add your keymap, compile it and flash it to your board. Once you're happy with your changes, you can add, commit, and push them to your fork like this:
@@ -52,7 +48,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master
```
Your changes now exist on your fork on Github - if you go back there (https://github.com/<whoeveryouare>/qmk_firmware), you can create a "New Pull Request" by clicking this button:
Your changes now exist on your fork on Github - if you go back there (`https://github.com/<whoeveryouare>/qmk_firmware`), you can create a "New Pull Request" by clicking this button:
This page attempts to explain the basic information you need to know to work with the QMK project. It assumes that you are familiar with navigating a UNIX shell, but does not assume you are familiar with C or with compiling using make.
## Basic QMK structure
QMK is a fork of @tmk's [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
### Keyboard project structure
Within the `handwired` and `keyboard` folders is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard`. Within you'll find the following structure:
*`keymaps/`: Different keymaps that can be built
*`rules.mk`: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific `Makefile`.
*`config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`.
### Keymap structure
In every keymap folder, the following files may be found. Only `keymap.c` is required, if the rest of the files are not found the default options will be chosen.
*`config.h`: the options to configure your keymap
*`keymap.c`: all of your keymap code, required
*`rules.mk`: the features of QMK that are enabled
*`readme.md`: a description of your keymap, how others might use it, and explanations of features. Please upload images to a service like imgur.
If the keymap `config.h` exists that file is included by the build system and the keyboard `config.h` is not included. If you wish to override settings in your keymap's `config.h` you will need to include some glue code:
```
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
```
If you want to override a setting from the parent `config.h` file, you need to `#undef` and then `#define` the setting again, like this:
This page attempts to explain the basic information you need to know to work with the QMK project. It assumes that you are familiar with navigating a Unix shell, but does not assume you are familiar with C or with compiling using make.
## Basic QMK Structure
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
### Userspace Structure
Within the folder `users` is a directory for each user. This is a place for users to put code that they might use between keyboards. See the docs for [Userspace feature](feature_userspace.md) for more information.
### Keyboard Project Structure
Within the folder `keyboards` and its subfolder `handwired` is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard`. Within it you'll find the following structure:
*`keymaps/`: Different keymaps that can be built
*`rules.mk`: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific `rules.mk`.
*`config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`.
### Keymap Structure
In every keymap folder, the following files may be found. Only `keymap.c` is required, and if the rest of the files are not found the default options will be chosen.
*`config.h`: the options to configure your keymap
*`keymap.c`: all of your keymap code, required
*`rules.mk`: the features of QMK that are enabled
*`readme.md`: a description of your keymap, how others might use it, and explanations of features. Please upload images to a service like imgur.
The build system automatically picks up the config files in the above order. If you wish to override any setting set by a previous `config.h` you will need to first include some boilerplate code for the settings you wish to change.
```
#pragma once
```
Then to override a setting from the previous `config.h` file you must `#undef` and then `#define` the setting again.
The boilerplate code and setting look like this together:
The full syntax of the `make` command is `<keyboard_folder>:<keymap>:<target>`, where:
*`<keyboard_folder>` is the path of the keyboard, for example `planck`
* Use `all` to compile all keyboards
* Specify the path to compile a revision, for example `planck/rev4` or `planck/rev3`
* Specify the path to compile a revision, for example `planck/rev4` or `planck/rev3`
* If the keyboard doesn't have any folders, it can be left out
* To compile the default folder, you can leave it out
*`<keymap>` is the name of the keymap, for example `algernon`
@@ -13,8 +13,8 @@ The full syntax of the `make` command is `<keyboard_folder>:<keymap>:<target>`,
The `<target>` means the following
* If no target is given, then it's the same as `all` below
*`all` compiles as many keyboard/revision/keymap combinations as specified. For example, `make planck/rev4:default:all` will generate a single .hex, while `make planck/rev4:all` will generate a hex for every keymap available to the planck.
*`dfu`, `teensy` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for ChibiOS keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme.
*`all` compiles as many keyboard/revision/keymap combinations as specified. For example, `make planck/rev4:default` will generate a single .hex, while `make planck/rev4:all` will generate a hex for every keymap available to the planck.
*`dfu`, `teensy`, `avrdude` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for ChibiOS keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme.
* **Note**: some operating systems need root access for these commands to work, so in that case you need to run for example `sudo make planck/rev4:default:dfu`.
*`clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems.
@@ -30,10 +30,10 @@ The make command itself also has some additional options, type `make --help` for
Here are some examples commands
*`make all:all` builds everything (all keyboard folders, all keymaps). Running just `make` from the `root` will also run this.
*`make ergodox_infinity:algernon:clean` will clean the build output of the Ergodox Infinity keyboard.
*`make ergodox_infinity:algernon:clean` will clean the build output of the Ergodox Infinity keyboard.
*`make planck/rev4:default:dfu COLOR=false` builds and uploads the keymap without color output.
## `rules.mk` options
## `rules.mk` Options
Set these variables to `no` to disable them, and `yes` to enable them.
@@ -53,9 +53,9 @@ This allows you to use the system and audio control key codes.
`CONSOLE_ENABLE`
This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html).
This allows you to print messages that can be read using [`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html).
By default, all debug (*dprint*) print (*print*, *xprintf*), and user print (*uprint*) messages will be enabled. This will eat up a significant portion of the flash and may make the keyboard .hex file too big to program.
By default, all debug (*dprint*) print (*print*, *xprintf*), and user print (*uprint*) messages will be enabled. This will eat up a significant portion of the flash and may make the keyboard .hex file too big to program.
To disable debug messages (*dprint*) and reduce the .hex file size, include `#define NO_DEBUG` in your `config.h` file.
@@ -65,7 +65,7 @@ To disable print messages (*print*, *xprintf*) and **KEEP** user print messages
To see the text, open `hid_listen` and enjoy looking at your printed messages.
**NOTE:** Do not include *uprint* messages in anything other than your keymap code. It must not be used within the QMK system framework. Otherwise, you will bloat other people's .hex files.
**NOTE:** Do not include *uprint* messages in anything other than your keymap code. It must not be used within the QMK system framework. Otherwise, you will bloat other people's .hex files.
Consumes about 400 bytes.
@@ -93,19 +93,17 @@ This enables MIDI sending and receiving with your keyboard. To enter MIDI send m
`UNICODE_ENABLE`
This allows you to send unicode symbols via`UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported.
This allows you to send Unicode characters using`UC(<code point>)` in your keymap. Code points up to `0x7FFF` are supported. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji.
`UNICODEMAP_ENABLE`
This allows sending unicode symbols using `X(<unicode>)` in your keymap. Codes
up to 0xFFFFFFFF are supported, including emojis. You will need to maintain
a separate mapping table in your keymap file.
This allows you to send Unicode characters using `X(<map index>)` in your keymap. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
Known limitations:
- Under Mac OS, only codes up to 0xFFFF are supported.
- Under Linux ibus, only codes up to 0xFFFFF are supported (but anything important is still under this limit for now).
`UCIS_ENABLE`
Characters out of range supported by the OS will be ignored.
This allows you to send Unicode characters by inputting a mnemonic corresponding to the character you want to send. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
For further details, as well as limitations, see the [Unicode page](feature_unicode.md).
`BLUETOOTH_ENABLE`
@@ -117,7 +115,7 @@ This allows you output audio on the C6 pin (needs abstracting). See the [audio p
`FAUXCLICKY_ENABLE`
Uses buzzer to emulate clicky switches. A cheap imitation of the Cherry blue switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
Uses buzzer to emulate clicky switches. A cheap imitation of the Cherry blue switches. By default, uses the C6 pin, same as `AUDIO_ENABLE`.
`VARIABLE_TRACE`
@@ -131,9 +129,25 @@ This consumes about 5390 bytes.
`KEY_LOCK_ENABLE`
This enables [key lock](key_lock.md). This consumes an additional 260 bytes.
This enables [key lock](feature_key_lock.md). This consumes an additional 260 bytes.
## Customizing Makefile options on a per-keymap basis
`SPLIT_KEYBOARD`
This 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
`SPLIT_TRANSPORT`
As there is no standard split communication driver for ARM-based split keyboards yet, `SPLIT_TRANSPORT = custom` must be used for these. It will prevent the standard split keyboard communication code (which is AVR-specific) from being included, allowing a custom implementation to be used.
`CUSTOM_MATRIX`
Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan().
`DEBOUNCE_TYPE`
Lets you replace the default key debouncing routine with an alternative one. If `custom` you will need to provide your own implementation.
## Customizing Makefile Options on a Per-Keymap Basis
If your keymap directory has a file called `rules.mk` any options you set in that file will take precedence over other `rules.mk` options for your particular keyboard.
@@ -10,11 +10,11 @@ Using the `/Vagrantfile` in this repository requires you have [Vagrant](http://w
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
# Flashing the firmware
# Flashing the Firmware
The "easy" way to flash the firmware is using a tool from your host OS:
Software provided by Atmel for flashing AVR devices. We generally recommend [QMK Flasher](https://github.com/qmk/qmk_flasher) instead, but for some advanced use cases FLIP is required.
## git
Versioning software used at the commandline
## GitHub
The website that hosts most of the QMK project. It provides integration with git, issue tracking, and other features that help us run QMK.
## ISP
In-system programming, a method of programming an AVR chip using external hardware and the JTAG pins.
## hid_listen
An interface for receiving debugging messages from your keyboard. You can view these messages using [QMK Flasher](https://github.com/qmk/qmk_flasher) or [PJRC's hid_listen](https://www.pjrc.com/teensy/hid_listen.html)
## Keycode
A 2-byte number that represents a particular key. `0x00`-`0xFF` are used for [Basic Keycodes](keycodes_basic.html) while `0x100`-`0xFFFF` are used for [Quantum Keycodes](quantum_keycodes.html).
## Key Down
An event that happens when a key is pressed down, but is completed before a key is released.
## Key Up
An event that happens when a key is released.
## Keymap
An array of keycodes mapped to a physical keyboard layout, which are processed on key presses and releases
## Layer
An abstraction used to allow a key to serve multiple purposes. The highest active layer takes precedence.
## Leader Key
A feature that allows you to tap the leader key followed by a sequence of 1, 2, or 3 keys to activate key presses or other quantum features.
Light Emitting Diode, the most common device used for indicators on a keyboard.
## Make
Software package that is used to compile all the source files. You run `make` with various options to compile your keyboard firmware.
## Matrix
A wiring pattern of columns and rows that enables the MCU to detect keypresses with a fewer number of pins. The matrix often incorporates diodes to allow for NKRO.
## Macro
A feature that lets you send muiltple keypress events (hid reports) after having pressed only a single key.
* [Macro Documentation](macros.html)
## MCU
Microcontrol Unit, the processor that powers your keyboard.
## Modifier
A key that is held down while typing another key to modify the action of that key. Examples include Ctrl, Alt, and Shift.
## Mousekeys
A feature that lets you control your mouse cursor and click from your keyboard.
* [Mousekeys Documentation](mouse_keys.html)
## N-Key Rollover (NKRO)
A term that applies to keyboards that are capable of reporting any number of key-presses at once.
## Oneshot Modifier
A modifier that acts as if it is held down until another key is released, so you can press the mod and then press the key, rather than holding the mod while pressing the key.
## ProMicro
A low cost AVR development board. Clones of this device are often found on ebay very inexpensively (under $5) but people often struggle with flashing their pro micros.
## Pull Request
A request to submit code to QMK. We encourage all users to submit Pull Requests for their personal keymaps.
## QWERTY
The standard English keyboard layout, and often a shortcut for other language's standard layouts. Named for the first 6 letters on the keyboard.
## QWERTZ
The standard Deutsche (German) keyboard layout. Named for the first 6 letters on the keyboard.
## Rollover
The term for pressing a key while a key is already held down. Variants include 2KRO, 6KRO, and NKRO.
## Scancode
A 1 byte number that is sent as part of a HID report over USB that represents a single key. These numbers are documented in the [HID Usage Tables](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) published by the [USB-IF](http://www.usb.org/).
## Space Cadet Shift
A special set of shift keys which allow you to type various types of braces by tapping the left or right shift one or more times.
Pressing and releasing a key. In some situations you will need to distinguish between a key down and a key up event, and Tap always refers to both at once.
## Tap Dance
A feature that lets you assign muiltple keycodes to the same key based on how many times you press it.
* [Tap Dance Documentation](tap_dance.md)
## Teensy
A low-cost AVR development board that is commonly used for hand-wired builds. A teensy is often chosen despite costing a few dollors more due to its halfkay bootloader, which makes flashing very simple.
## Underlight
A generic term for LEDs that light the underside of the board. These LED's typically shine away from the bottom of the PCB and towards the surface the keyboard rests on.
## Unicode
In the larger computer world Unicode is a set of encoding schemes for representing characters in any language. As it relates to QMK it means using various OS schemes to send unicode codepoints instead of scancodes.
* [Unicode Documentation](unicode.md)
## Unit Testing
A framework for running automated tests against QMK. Unit testing helps us be confident that our changes do not break anything.
* [Unit Testing Documentation](unit_testing.md)
## USB
Universal Serial Bus, the most common wired interface for a keyboard.
## USB Host (or simply Host)
The USB Host is your computer, or whatever device your keyboard is plugged into.
# Couldn't find the term you're looking for?
[Open an issue](https://github.com/qmk/qmk_firmware/issues) with your question and the term in question could be added here. Better still, open a pull request with the definition. :)
* Wire (strained for wiring to the Teensy, anything for the rows/columns)
* Soldering iron set at 600ºF or 315ºC (if temperature-controlled)
* Resin-cored solder (leaded or lead-free)
* Rosin-cored solder (leaded or lead-free)
* Adequate ventilation/a fan
* Tweezers (optional)
* Wire cutters/snippers
## How the matrix works (why we need diodes)
## How the Matrix Works (Why We Need Diodes)
The microcontroller (in this case, the Teensy 2.0) will be setup up via the firmware to send a logical 1 to the columns, one at a time, and read from the rows, all at once - this process is called matrix scanning. The matrix is a bunch of open switches that, by default, don't allow any current to pass through - the firmware will read this as no keys being pressed. As soon as you press one key down, the logical 1 that was coming from the column the keyswitch is attached to gets passed through the switch and to the corresponding row - check out the following 2x2 example:
@@ -100,9 +100,9 @@ Things act as they should! Which will get us the following data:
The firmware can then use this correct data to detect what it should do, and eventually, what signals it needs to send to the OS.
# The actual hand-wiring
# The Actual Hand-Wiring
## Getting things in place
## Getting Things in Place
When starting this, you should have all of your stabilisers and keyswitches already installed (and optionally keycaps). If you're using a Cherry-type stabiliser (plate-mounted only, obviously), you'll need to install that before your keyswitches. If you're using Costar ones, you can installed them afterwards.
@@ -112,7 +112,7 @@ Get your soldering iron heated-up and collect the rest of the materials from the
Before continuing, plan out where you're going to place your Teensy. If you're working with a board that has a large (6.25u) spacebar, it may be a good idea to place it in-between switches against the plate. Otherwise, you may want to trim some of the leads on the keyswitches where you plan on putting it - this will make it a little harder to solder the wire/diodes, but give you more room to place the Teensy.
## Preparing the diodes
## Preparing the Diodes
It's a little easier to solder the diodes in place if you bend them at a 90º angle immediately after the black line - this will help to make sure you put them on the right way (direction matters), and in the correct position. The diodes will look like this when bent (with longer leads):
@@ -125,7 +125,7 @@ It's a little easier to solder the diodes in place if you bend them at a 90º an
We'll be using the long lead at the bent end to connect it to the elbow (bent part) of the next diode, creating the row.
## Soldering the diodes
## Soldering the Diodes
Starting at the top-left switch, place the diode (with tweezers if you have them) on the switch so that the diode itself is vertically aligned, and the black line is facing toward you. The straight end of the diode should be touching the left contact on the switch, and the bent end should be facing to the right and resting on the switch there, like this:
@@ -133,7 +133,7 @@ Starting at the top-left switch, place the diode (with tweezers if you have them
│o
┌┴┐ o
│ │ O
├─┤
├─┤
└┬┘
└─────────────
```
@@ -142,7 +142,7 @@ Letting the diode rest, grab your solder, and touch both it and the soldering ir
The smoke that the rosin releases is harmful, so be careful not to breath it or get it in your eyes/face.
After soldering things in place, it may be helpful to blow on the joint to push the smoke away from your face, and cool the solder quicker. You should see the solder develop a matte (not shiney) surface as it solidifies. Keep in mind that it will still be very hot afterwards, and will take a couple minutes to be cool to touch. Blow on it will accelerate this process.
After soldering things in place, it may be helpful to blow on the joint to push the smoke away from your face, and cool the solder quicker. You should see the solder develop a matte (not shiny) surface as it solidifies. Keep in mind that it will still be very hot afterwards, and will take a couple minutes to be cool to touch. Blow on it will accelerate this process.
When the first diode is complete, the next one will need to be soldered to both the keyswitch, and the previous diode at the new elbow. That will look something like this:
@@ -150,7 +150,7 @@ When the first diode is complete, the next one will need to be soldered to both
│o │o
┌┴┐ o ┌┴┐ o
│ │ O │ │ O
├─┤ ├─┤
├─┤ ├─┤
└┬┘ └┬┘
└────────────────┴─────────────
```
@@ -159,7 +159,7 @@ After completing a row, use the wire cutters to trim the excess wire from the to
When all of the diodes are completely soldered, it's a good idea to quickly inspect each one to ensure that your solder joints are solid and sturdy - repairing things after this is possible, but more difficult.
## Soldering the columns
## Soldering the Columns
You'll have some options in the next process - it's a good idea to insulate the column wires (since the diodes aren't), but if you're careful enough, you can use exposed wires for the columns - it's not recommended, though. If you're using single-cored wire, stripping the plastic off of the whole wire and feeding it back on is probably the best option, but can be difficult depending on the size and materials. You'll want to leave parts of the wire exposed where you're going to be solder it onto the keyswitch.
@@ -169,7 +169,7 @@ Before beginning to solder, it helps to have your wire pre-bent (if using single
If you're not using any insulation, you can try to keep the column wires elevated, and solder them near the tips of the keyswitch contacts - if the wires are sturdy enough, they won't short out to the row wiring an diodes.
## Wiring things to the Teensy
## Wiring Things to the Teensy
Now that the matrix itself is complete, it's time to connect what you've done to the Teensy. You'll be needing the number of pins equal to your number of columns + your number of rows. There are some pins on the Teensy that are special, like D6 (the LED on the chip), or some of the UART, SPI, I2C, or PWM channels, but only avoid those if you're planning something in addition to a keyboard. If you're unsure about wanting to add something later, you should have enough pins in total to avoid a couple.
@@ -185,31 +185,40 @@ When you're done with the columns, start with the rows in the same process, from
As you move along, be sure that the Teensy is staying in place - recutting and soldering the wires is a pain!
# Getting some basic firmware set-up
## Additional guides
If you're more of a visual learner, or want some additional tips and something more to follow along, these two visual step by step guides may be helpful:
- [BrownFox's step by step guide](https://deskthority.net/viewtopic.php?f=7&t=6050)
- [Cribbit's modern hand wiring guide](https://geekhack.org/index.php?topic=87689.0)
# Getting Some Basic Firmware Set Up
From here, you should have a working keyboard once you program a firmware. Before we attach the Teensy permanently to the keyboard, let's quickly get some firmware loaded onto the Teensy so we can test each keyswitch.
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/) (paid) or [Visual Studio Code](https://code.visualstudio.com) (free).
The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
The first thing we're going to do is create a new keyboard. In your terminal, run this command, which will ask you some questions and generate a basic keyboard project:
```
util/new_project.sh <project_name>
./util/new_keyboard.sh
```
You'll want to navigate to the `keyboards/<project_name>/` folder by typing, like the print-out from the script specifies:
cd keyboards/<project_name>
```
cd keyboards/<project_name>
```
### config.h
### `config.h`
The first thing you're going to want to modify is the `config.h` file. Find `MATRIX_ROWS` and `MATRIX_COLS` and change their definitions to match the dimensions of your keyboard's matrix.
Farther down are `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`. Change their definitions to match how you wired up your matrix (looking from the top of the keyboard, the rows run top-to-bottom and the columns run left-to-right). Likewise, change the definition of `UNUSED_PINS` to match the pins you did not use (this will save power).
### \<project_name\>.h
### `<project_name>.h`
The next file you'll want to look at is `<project_name>.h`. You're going to want to rewrite the `KEYMAP` definition - the format and syntax here is extremely important, so pay attention to how things are setup. The first half of the definition are considered the arguments - this is the format that you'll be following in your keymap later on, so you'll want to have as many k*xy* variables here as you do keys. The second half is the part that the firmware actually looks at, and will contain gaps depending on how you wired your matrix.
The next file you'll want to look at is `<project_name>.h`. You're going to want to rewrite the `LAYOUT` definition - the format and syntax here is extremely important, so pay attention to how things are setup. The first half of the definition are considered the arguments - this is the format that you'll be following in your keymap later on, so you'll want to have as many k*xy* variables here as you do keys. The second half is the part that the firmware actually looks at, and will contain gaps depending on how you wired your matrix.
We'll dive into how this will work with the following example. Say we have a keyboard like this:
@@ -231,10 +240,10 @@ This can be described by saying the top row is 3 1u keys, and the bottom row is
└─────┴─────┘
```
The middle column is unused on the bottom row in this example. Our `KEYMAP` definition would look like this:
The middle column is unused on the bottom row in this example. Our `LAYOUT` definition would look like this:
```
#define KEYMAP( \
#define LAYOUT( \
k00, k01, k02, \
k10, k11, \
) \
@@ -256,10 +265,10 @@ Let's say that instead, we wired our keyboard like this (a fair thing to do):
└─────┴─────┘
```
This would require our `KEYMAP` definition to look like this:
This would require our `LAYOUT` definition to look like this:
```
#define KEYMAP( \
#define LAYOUT( \
k00, k01, k02, \
k10, k11, \
) \
@@ -269,9 +278,9 @@ This would require our `KEYMAP` definition to look like this:
}
```
Notice how the `k11` and `KC_NO` switched places to represent the wiring, and the unused final column on the bottom row. Sometimes it'll make more sense to put a keyswitch on a particular column, but in the end, it won't matter, as long as all of them are accounted for. You can use this process to write out the `KEYMAP` for your entire keyboard - be sure to remember that your keyboard is actually backwards when looking at the underside of it.
Notice how the `k11` and `KC_NO` switched places to represent the wiring, and the unused final column on the bottom row. Sometimes it'll make more sense to put a keyswitch on a particular column, but in the end, it won't matter, as long as all of them are accounted for. You can use this process to write out the `LAYOUT` for your entire keyboard - be sure to remember that your keyboard is actually backwards when looking at the underside of it.
### keymaps/<variant>/default.c
### `keymaps/<variant>/default.c`
This is the actual keymap for your keyboard, and the main place you'll make changes as you perfect your layout. `default.c` is the file that gets pull by default when typing `make`, but you can make other files as well, and specify them by typing `make handwired/<keyboard>:<variant>`, which will pull `keymaps/<variant>/keymap.c`.
@@ -291,7 +300,7 @@ This can be accomplished by using the following `keymaps` definition:
Note that the layout of the keycodes is similar to the physical layout of our keyboard - this make it much easier to see what's going on. A lot of the keycodes should be fairly obvious, but for a full list of them, check out [Keycodes](keycodes.md) - there are also a lot of aliases to condense your keymap file.
It's also important to use the `KEYMAP` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
It's also important to use the `LAYOUT` function we defined earlier - this is what allows the firmware to associate our intended readable keymap with the actual wiring.
## Compiling your firmware
## Compiling Your Firmware
After you've written out your entire keymap, you're ready to get the firmware compiled and onto your Teensy. Before compiling, you'll need to get your [development environment set-up](getting_started_build_tools.md) - you can skip the dfu-programmer instructions, but you'll need to download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html) to get the firmware on your Teensy.
@@ -310,7 +319,7 @@ Once everything is installed, running `make` in the terminal should get you some
Once you have your `<project_name>.hex` file, open up the Teensy loader application, and click the file icon. From here, navigate to your `QMK/keyboards/<project_name>/` folder, and select the `<project_name>.hex` file. Plug in your keyboard and press the button on the Teensy - you should see the LED on the device turn off once you do. The Teensy Loader app will change a little, and the buttons should be clickable - click the download button (down arrow), and then the reset button (right arrow), and your keyboard should be ready to go!
## Testing your firmware
## Testing Your Firmware
Carefully flip your keyboard over, open up a new text document, and try typing - you should get the characters that you put into your keymap. Test each key, and note the ones that aren't working. Here's a quick trouble-shooting guide for non-working keys:
@@ -319,13 +328,13 @@ Carefully flip your keyboard over, open up a new text document, and try typing -
2. Check the solder joints on the diode - if the diode is loose, part of your row may register, while the other may not.
3. Check the solder joints on the columns - if your column wiring is loose, part or all of the column may not work.
4. Check the solder joints on both sides of the wires going to/from the Teensy - the wires need to be fully soldered and connect to both sides.
5. Check the <project_name>.h file for errors and incorrectly placed `KC_NO`s - if you're unsure where they should be, instead duplicate a k*xy* variable.
5. Check the `<project_name>.h` file for errors and incorrectly placed `KC_NO`s - if you're unsure where they should be, instead duplicate a k*xy* variable.
6. Check to make sure you actually compiled the firmware and flashed the Teensy correctly. Unless you got error messages in the terminal, or a pop-up during flashing, you probably did everything correctly.
If you've done all of these things, keep in mind that sometimes you might have had multiple things affecting the keyswitch, so it doesn't hurt to test the keyswitch by shorting it out at the end.
# Securing the Teensy, finishing your hardware, getting fancier firmware
# Securing the Teensy, Finishing Your Hardware, Getting Fancier Firmware
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](http://docs.qmk.fm) for a full feature list, and dive into the different project (Planck, Clueboard, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
There are a lot of possibilities inside the firmware - explore [docs.qmk.fm](http://docs.qmk.fm) for a full feature list, and dive into the different keyboards (Planck, Clueboard, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
QMK runs on a variety of hardware. If your processor can be targeted by [LUFA](http://www.fourwalledcubicle.com/LUFA.php) or [ChibiOS](http://www.chibios.com) you can probably get QMK running on it. This section explores getting QMK running on, and communicating with, hardware of all kinds.
This page describes the support for for AVR processors in QMK. AVR processors include the atmega32u4, atmega32u2, at90usb1286, and other processors from Atmel Corporation. AVR processors are 8-bit MCU's that are designed to be easy to work with. The most common AVR processors in keyboards have on-board USB and plenty of GPIO for supporting large keyboard matrices. They are the most popular MCU for use in keyboards today.
If you have not yet you should read the [Keyboard Guidelines](hardware_keyboard_guidelines.md) to get a sense of how keyboards fit into QMK.
## Adding Your AVR Keyboard to QMK
QMK has a number of features to simplify working with AVR keyboards. For most keyboards you don't have to write a single line of code. To get started, run the `util/new_keyboard.sh` script:
```
$ ./util/new_keyboard.sh
Generating a new QMK keyboard directory
Keyboard Name: mycoolkb
Keyboard Type [avr]:
Your Name [John Smith]:
Copying base template files... done
Copying avr template files... done
Renaming keyboard files... done
Replacing %KEYBOARD% with mycoolkb... done
Replacing %YOUR_NAME% with John Smith... done
Created a new keyboard called mycoolkb.
To start working on things, cd into keyboards/mycoolkb,
or open the directory in your favourite text editor.
```
This will create all the files needed to support your new keyboard, and populate the settings with default values. Now you just need to customize it for your keyboard.
## `readme.md`
This is where you'll describe your keyboard. Please follow the [Keyboard Readme Template](documentation_templates.md#keyboard-readmemd-template) when writing your `readme.md`. You're encouraged to place an image at the top of your `readme.md`, please use an external service such as [Imgur](http://imgur.com) to host the images.
## `<keyboard>.c`
This is where all the custom logic for your keyboard goes. Many keyboards do not need to put anything at all in here. You can learn more about writing custom logic in [Custom Quantum Functions](custom_quantum_functions.md).
## `<keyboard>.h`
This is the file you define your [Layout Macro(s)](feature_layouts.md) in. At minimum you should have a `#define LAYOUT` for your keyboard that looks something like this:
```c
#define LAYOUT( \
k00, k01, k02, \
k10, k11 \
) { \
{ k00, k01, k02 }, \
{ k10, KC_NO, k11 }, \
}
```
The first half of the `LAYOUT` pre-processor macro defines the physical arrangement of keys. The second half of the macro defines the matrix the switches are connected to. This allows you to have a physical arrangement of keys that differs from the wiring matrix.
Each of the `k__` variables needs to be unique, and typically they follow the format `k<row><col>`.
The physical matrix (the second half) must have a number of rows equaling `MATRIX_ROWS`, and each row must have exactly `MATRIX_COLS` elements in it. If you do not have this many physical keys you can use `KC_NO` to fill in the blank spots.
## `config.h`
The `config.h` file is where you configure the hardware and feature set for your keyboard. There are a lot of options that can be placed in that file, too many to list there. For a complete overview of available options see the [Config Options](config_options.md) page.
### Hardware Configuration
At the top of the `config.h` you'll find USB related settings. These control how your keyboard appears to the Operating System. If you don't have a good reason to change you should leave the `VENDOR_ID` as `0xFEED`. For the `PRODUCT_ID` you should pick a number that is not yet in use.
Do change the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` lines to accurately reflect your keyboard.
```c
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER You
#define PRODUCT my_awesome_keyboard
#define DESCRIPTION A custom keyboard
```
?> Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. ?> On Linux these values will not be visible in lsusb by default, since Linux takes the information from the list maintained by [USB ID Repository](http://www.linux-usb.org/usb-ids.html) by default. lsusb will show the information reported by the device when executed with -v option. It is also present in kernel logs after plugging in the device.
### Keyboard Matrix Configuration
The next section of the `config.h` file deals with your keyboard's matrix. The first thing you should set is the matrix's size. This is usually, but not always, the same number of rows and columns as the physical key arrangement.
```c
#define MATRIX_ROWS 2
#define MATRIX_COLS 3
```
Once you've defined the size of your matrix you need to define which pins on your MCU are connected to rows and columns. To do so simply specify the names of those pins:
```c
#define MATRIX_ROW_PINS { D0, D5 }
#define MATRIX_COL_PINS { F1, F0, B0 }
#define UNUSED_PINS
```
The number of `MATRIX_ROW_PINS` entries must be the same as the number you assigned to `MATRIX_ROWS`, and likewise for `MATRIX_COL_PINS` and `MATRIX_COLS`. You do not have to specify `UNUSED_PINS`, but you can if you want to document what pins are open.
Finally, you can specify the direction your diodes point. This can be `COL2ROW` or `ROW2COL`.
```c
#define DIODE_DIRECTION COL2ROW
```
#### Direct Pin Matrix
To configure a keyboard where each switch is connected to a separate pin and ground instead of sharing row and column pins, use `DIRECT_PINS`. The mapping defines the pins of each switch in rows and columns, from left to right. Must conform to the sizes within `MATRIX_ROWS` and `MATRIX_COLS`, use `NO_PIN` to fill in blank spaces. Overrides the behaviour of `DIODE_DIRECTION`, `MATRIX_ROW_PINS` and `MATRIX_COL_PINS`.
```c
// #define MATRIX_ROW_PINS { D0, D5 }
// #define MATRIX_COL_PINS { F1, F0, B0 }
#define DIRECT_PINS { \
{ F1, E6, B0, B2, B3 }, \
{ F5, F0, B1, B7, D2 }, \
{ F6, F7, C7, D5, D3 }, \
{ B5, C6, B6, NO_PIN, NO_PIN } \
}
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
//#define DIODE_DIRECTION
```
### Backlight Configuration
By default QMK supports backlighting on pins `B5`, `B6`, and `B7`. If you are using one of those you can simply enable it here. For more details see the [Backlight Documentation](feature_backlight.md).
```c
#define BACKLIGHT_PIN B7
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6
```
?> You can use backlighting on any pin you like, but you will have to do more work to support that. See the [Backlight Documentation](feature_backlight.md) for more details.
### Other Configuration Options
There are a lot of features that can be configured or tuned in `config.h`. You should see the [Config Options](config_options.md) page for more details.
## `rules.mk`
You use the `rules.mk` file to tell QMK what files to build and what features to enable. If you are building around an atmega32u4 you can largely leave these defaults alone. If you are using another MCU you may have to tweak some parameters.
### MCU Options
These options tell the build system what CPU to build for. Be very careful if you change any of these settings, you can render your keyboard inoperable.
```make
MCU= atmega32u4
F_CPU=16000000
ARCH= AVR8
F_USB=$(F_CPU)
OPT_DEFS+= -DINTERRUPT_CONTROL_ENDPOINT
```
### Bootloaders
The bootloader is a special section of your MCU that allows you to upgrade the code stored on the MCU. Think of it like a Rescue Partition for your keyboard.
#### Teensy Bootloader Example
```make
BOOTLOADER= halfkay
```
#### Atmel DFU Loader Example
```make
BOOTLOADER= atmel-dfu
```
#### Pro Micro Bootloader Example
```make
BOOTLOADER= caterina
```
### Build Options
There are a number of features that can be turned on or off in `rules.mk`. See the [Config Options](config_options.md#feature-options) page for a detailed list and description.
QMK is used on a lot of different hardware. While support for the most common MCU's and matrix configurations is built-in there are a number of drivers that can be added to a keyboard to support additional hardware. Examples include mice and other pointing devices, i/o expanders for split keyboards, bluetooth modules, and LCD, OLED, and TFT screens.
<!-- FIXME: This should talk about how drivers are integrated into QMK and how you can add your own driver.
# Driver System Overview
-->
# Available Drivers
## ProMicro (AVR Only)
Support for addressing pins on the ProMicro by their Arduino name rather than their AVR name. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process.
## SSD1306 OLED Driver
Support for SSD1306 based OLED displays. For more information see the [OLED Driver Feature](feature_oled_driver.md) page.
## uGFX
You can make use of uGFX within QMK to drive character and graphic LCD's, LED arrays, OLED, TFT, and other display technologies. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process.
## WS2812 (AVR Only)
Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
## IS31FL3731
Support for up to 2 drivers. Each driver impliments 2 charlieplex matrices to individually address LEDs using I2C. This allows up to 144 same color LEDs or 32 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix.md) page.
## IS31FL3733
Support for up to a single driver with room for expansion. Each driver can control 192 individual LEDs or 64 RGB LEDs. For more information on how to setup the driver see the [RGB Matrix](feature_rgb_matrix.md) page.
Since starting, QMK has grown by leaps and bounds thanks to people like you who contribute to creating and maintaining our community keyboards. As we've grown we've discovered some patterns that work well, and ask that you conform to them to make it easier for other people to benefit from your hard work.
## Naming Your Keyboard/Project
All keyboard names are in lower case, consisting only of letters, numbers, and underscore (`_`). Names may not begin with an underscore. Forward slash (`/`) is used as a sub-folder separation character.
The names `test`, `keyboard`, and `all` are reserved for make commands and may not be used as a keyboard or subfolder name.
Valid Examples:
*`412_64`
*`chimera_ortho`
*`clueboard/66/rev3`
*`planck`
*`v60_type_r`
## Sub-folders
QMK uses sub-folders both for organization and to share code between revisions of the same keyboard. You can nest folders up to 4 levels deep:
If a sub-folder has a `rules.mk` file it will be considered a compilable keyboard. It will be available in QMK Configurator and tested with `make all`. If you are using a folder to organize several keyboards from the same maker you should not have a `rules.mk` file.
Example:
Clueboard uses sub-folders for both purposes, organization and keyboard revisions.
* [`clueboard`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard) ← This is the organization folder, there's no `rules.mk` file
* [`60`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/60) ← This is a compilable keyboard, it has a `rules.mk` file
* [`66`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66) ← This is also compilable- it uses `DEFAULT_FOLDER` to specify `rev3` as the default revision
* [`rev3`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev3) ← compilable: `make clueboard/66/rev3` or `make clueboard/66`
## Keyboard Folder Structure
Your keyboard should be located in `qmk_firmware/keyboards/` and the folder name should be your keyboard's name as described in the previous section. Inside this folder should be several files:
*`readme.md`
*`info.json`
*`config.h`
*`rules.mk`
*`<keyboard_name>.c`
*`<keyboard_name>.h`
### `readme.md`
All projects need to have a `readme.md` file that explains what the keyboard is, who made it and where it's available. If applicable, it should also contain links to more information, such as the maker's website. Please follow the [published template](documentation_templates.md#keyboard-readmemd-template).
### `info.json`
This file is used by the [QMK API](https://github.com/qmk/qmk_api). It contains the information [QMK Configurator](https://config.qmk.fm/) needs to display a representation of your keyboard. You can also set metadata here. For more information see the [reference page](reference_info_json.md).
### `config.h`
All projects need to have a `config.h` file that sets things like the matrix size, product name, USB VID/PID, description and other settings. In general, use this file to set essential information and defaults for your keyboard that will always work.
### `rules.mk`
The presence of this file means that the folder is a keyboard target and can be used in `make` commands. This is where you setup the build environment for your keyboard and configure the default set of features.
### `<keyboard_name.c>`
This is where you will write custom code for your keyboard. Typically you will write code to initialize and interface with the hardware in your keyboard. If your keyboard consists of only a key matrix with no LEDs, speakers, or other auxillary hardware this file can be blank.
The following functions are typically defined in this file:
This file is used to define the matrix for your keyboard. You should define at least one C macro which translates an array into a matrix representing the physical switch matrix for your keyboard. If it's possible to build your keyboard with multiple layouts you should define additional macros.
If you have only a single layout you should call this macro `LAYOUT`.
When defining multiple layouts you should have a base layout, named `LAYOUT_all`, that supports all possible switch positions on your matrix, even if that layout is impossible to build physically. This is the macro you should use in your `default` keymap. You should then have additional keymaps named `default_<layout>` that use your other layout macros. This will make it easier for people to use the layouts you define.
Layout macro names are entirely lowercase, except for the word `LAYOUT` at the front.
As an example, if you have a 60% PCB that supports ANSI and ISO you might define the following layouts and keymaps:
| Layout Name | Keymap Name | Description |
|-------------|-------------|-------------|
| LAYOUT_all | default | A layout that supports both ISO and ANSI |
| LAYOUT_ansi | default_ansi | An ANSI layout |
| LAYOUT_iso | default_iso | An ISO layout |
## Image/Hardware Files
In an effort to keep the repo size down we're no longer accepting binary files of any format, with few exceptions. Hosting them elsewhere (such as <https://imgur.com>) and linking them in the `readme.md` is preferred.
Hardware files (such as plates, cases, pcb) can be contributed to the [qmk.fm repo](https://github.com/qmk/qmk.fm) and they will be made available on [qmk.fm](http://qmk.fm). Downloadable files are stored in `/<keyboard>/` (name follows the same format as above) which are served at `http://qmk.fm/<keyboard>/`, and pages are generated from `/_pages/<keyboard>/` which are served at the same location (.md files are generated into .html files through Jekyll). Check out the `lets_split` folder for an example.
## Keyboard Defaults
Given the amount of functionality that QMK exposes it's very easy to confuse new users. When putting together the default firmware for your keyboard we recommend limiting your enabled features and options to the minimal set needed to support your hardware. Recommendations for specific features follow.
### Bootmagic and Command
[Bootmagic](feature_bootmagic.md) and [Command](feature_command.md) are two related features that allow a user to control their keyboard in non-obvious ways. We recommend you think long and hard about if you're going to enable either feature, and how you will expose this functionality. Keep in mind that users who want this functionality can enable it in their personal keymaps without affecting all the novice users who may be using your keyboard as their first programmable board.
By far the most common problem new users encounter is accidentally triggering Bootmagic while they're plugging in their keyboard. They're holding the keyboard by the bottom, unknowingly pressing in alt and spacebar, and then they find that these keys have been swapped on them. We recommend leaving this feature disabled by default, but if you do turn it on consider setting `BOOTMAGIC_KEY_SALT` to a key that is hard to press while plugging your keyboard in.
If your keyboard does not have 2 shift keys you should provide a working default for `IS_COMMAND`, even when you have set `COMMAND_ENABLE = no`. This will give your users a default to conform to if they do enable Command.
## Custom Keyboard Programming
As documented on [Customizing Functionality](custom_quantum_functions.md) you can define custom functions for your keyboard. Please keep in mind that your users may want to customize that behavior as well, and make it possible for them to do that. If you are providing a custom function, for example `process_record_kb()`, make sure that your function calls the `_user()` version of the call too. You should also take into account the return value of the `_user()` version, and only run your custom code if the user returns `true`.
## Non-Production/Handwired Projects
We're happy to accept any project that uses QMK, including prototypes and handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder!
## Warnings as Errors
When developing your keyboard, keep in mind that all warnings will be treated as errors - these small warnings can build-up and cause larger errors down the road (and keeping them is generally a bad practice).
## Copyright Blurb
If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, in this format:
Copyright 2017 Your Name <your@email.com>
If you are modifying someone else's code and have made only trivial changes you should leave their name in the copyright statement. If you have done significant work on the file you should add your name to theirs, like so:
Copyright 2017 Their Name <original_author@example.com> Your Name <you@example.com>
The year should be the first year the file is created. If work was done to that file in later years you can reflect that by appending the second year to the first, like so:
Copyright 2015-2017 Your Name <you@example.com>
## License
The core of QMK is licensed under the [GNU General Public License](https://www.gnu.org/licenses/licenses.en.html). If you are shipping binaries for AVR processors you may choose either [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) or [GPLv3](https://www.gnu.org/licenses/gpl.html). If you are shipping binaries for ARM processors you must choose [GPL Version 3](https://www.gnu.org/licenses/gpl.html) to comply with the [ChibiOS](http://www.chibios.org) GPLv3 license.
If your keyboard makes use of the [uGFX](https://ugfx.io) features within QMK you must comply with the [uGFX License](https://ugfx.io/license.html), which requires a separate commercial license before selling a device containing uGFX.
## Technical Details
If you're looking for more information on making your keyboard work with QMK, [check out the hardware section](hardware.md)!
# How keys are registered, and interpreted by computers
# How Keys Are Registered, and Interpreted by Computers
In this file, you can will learn the concepts of how keyboards work over USB,
and you'll be able to better understand what you can expect from changing your
firmware directly.
## Schematic view
## Schematic View
Whenever you type on 1 particular key, here is the chain of actions taking
place:
@@ -12,7 +12,7 @@ place:
``` text
+------+ +-----+ +----------+ +----------+ +----+
| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
+------+ +-----+ +----------+ +----------+ |----+
+------+ +-----+ +----------+ +----------+ +----+
```
This scheme is a very simple view of what's going on, and more details follow
@@ -27,17 +27,17 @@ This usually happens with a periodic scan of key presses. This speed often is li
## 2. What the Firmware Sends
The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf) tells what a keyboard can actually send through USB to have a chance to be properly recognised. This includes a pre-defined list of scancodes which are simple numbers from `0x00` to `0xE7`. The firmware assigns a scancode to each key of the keyboard.
The [HID specification](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) tells what a keyboard can actually send through USB to have a chance to be properly recognised. This includes a pre-defined list of scancodes which are simple numbers from `0x00` to `0xE7`. The firmware assigns a scancode to each key of the keyboard.
The firmware does not send actually letters or characters, but only scancodes.
Thus, by modifying the firmware, you only can modify what scancode is sent over
The firmware does not send actual letters or characters, but only scancodes.
Thus, by modifying the firmware, you can only modify what scancode is sent over
USB for a given key.
## 3. What the Operating System Does
Once the keycode reaches the operating system, a piece of software has to have
it match an actual character thanks to a keyboard layout. For example, if your
layout is set to QWERTY, a sample of the matching table is as follow:
layout is set to QWERTY, a sample of the matching table is as follows:
| keycode | character |
|---------|-----------|
@@ -49,17 +49,17 @@ layout is set to QWERTY, a sample of the matching table is as follow:
| 0x1D | z/Z |
| ... | ... |
## Back to the firmware
## Back to the Firmware
As the layout is generally fixed (unless you create your own), the firmware can actually call a keycode by its layout name directly to ease things for you. This is exactly what is done here with `KC_A` actually representing `0x04` in QWERTY. The full list can be found in [keycodes](keycodes.md).
## List of Characters You Can Send
Putting aside shortcuts, having a limited set of keycodes mapped to a limited layout means that **the list of characters you can assign to a given key only is the ones present in the layout**.
Putting aside shortcuts, having a limited set of keycodes mapped to a limited layout means that **the list of characters you can assign to a given key are only the ones present in the layout**.
For example, this means that if you have a QWERTY US layout, and you want to assign 1 key to produce `€` (euro currency symbol), you are unable to do so, because the QWERTY US layout does not have such mapping. You could fix that by using a QWERTY UK layout, or a QWERTY US International.
For example, this means that if you have a QWERTY US layout, and you want to assign one key to produce `€` (euro currency symbol), you are unable to do so, because the QWERTY US layout does not have such mapping. You could fix that by using a QWERTY UK layout, or a QWERTY US International.
You may wonder why a keyboard layout containing all of Unicode is not devised then? The limited number of keycode available through USB simply disallow such a thing.
You may wonder why a keyboard layout containing all of Unicode is not devised then? The limited number of keycodes available through USB simply disallows such a thing.
|`void i2c_init(void);` |Initializes the I2C driver. This function should be called once before any transaction is initiated. |
|`uint8_t i2c_start(uint8_t address);` |Starts an I2C transaction. Address is the 7-bit slave address without the direction bit. |
|`uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. Returns status of transaction. |
|`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. |
|`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. |
|`uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read. |
|`uint8_t i2c_stop(void);` |Ends an I2C transaction. |
### Function Return
All the above functions, except `void i2c_init(void);` return the following truth table:
|`#STM32_I2C_USE_XXX` |Enable/Disable the hardware driver XXX (each driver should be explicitly listed) |FALSE |
|`#STM32_I2C_BUSY_TIMEOUT` |Time in ms until the I2C command is aborted if no response is received |50 |
|`#STM32_I2C_XXX_IRQ_PRIORITY` |Interrupt priority for hardware driver XXX (THIS IS AN EXPERT SETTING) |10 |
|`#STM32_I2C_USE_DMA` |Enable/Disable the ability of the MCU to offload the data transfer to the DMA unit |TRUE |
|`#STM32_I2C_XXX_DMA_PRIORITY` |Priority of DMA unit for hardware driver XXX (THIS IS AN EXPERT SETTING) |1 |
Secondly, in the `halconf.h` file, `#define HAL_USE_I2C` must be set to `TRUE`. This allows ChibiOS to load its I2C driver.
Lastly, we need to assign the correct GPIO pins depending on the I2C hardware driver we want to use.
By default the I2C1 hardware driver is assumed to be used. If another hardware driver is used, `#define I2C_DRIVER I2CDX` should be added to the `config.h` file with X being the number of hardware driver used. For example is I2C3 is enabled, the `config.h` file should contain `#define I2C_DRIVER I2CD3`. This aligns the QMK I2C driver with the Chibios I2C driver.
STM32 MCUs allows a variety of pins to be configured as I2C pins depending on the hardware driver used. By default B6 and B7 are set to I2C. You can use these defines to set your i2c pins:
| `I2C1_BANK` | The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) | `GPIOB` |
| `I2C1_SCL` | The pin number for the SCL pin (0-9) | `6` |
| `I2C1_SDA` | The pin number for the SDA pin (0-9) | `7` |
You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
```C
voidi2c_init(void)
{
setPinInput(B6);// Try releasing special pins for a short time
setPinInput(B7);
wait_ms(10);// Wait for the release to happen
palSetPadMode(GPIOB,6,PAL_MODE_ALTERNATE(4)|PAL_STM32_OTYPE_OPENDRAIN|PAL_STM32_PUPDR_PULLUP);// Set B6 to I2C function
palSetPadMode(GPIOB,7,PAL_MODE_ALTERNATE(4)|PAL_STM32_OTYPE_OPENDRAIN|PAL_STM32_PUPDR_PULLUP);// Set B7 to I2C function
QMK has a GPIO control abstraction layer which is microcontroller agnostic. This is done to allow easy access to pin control across different platforms.
## Functions
The following functions can provide basic control of GPIOs and are found in `quantum/quantum.h`.
|`setPinInput(pin)` |Set pin as input with high impedance (High-Z) |
|`setPinInputHigh(pin)`|Set pin as input with build in pull-up |
|`setPinInputLow(pin)` |Set pin as input with build in pull-down (Supported only on STM32)|
|`setPinOutput(pin)` |Set pin as output |
|`writePinHigh(pin)` |Set pin level as high, assuming it is an output |
|`writePinLow(pin)` |Set pin level as low, assuming it is an output |
|`writePin(pin, level)`|Set pin level, assuming it is an output |
|`readPin(pin)` |Returns the level of the pin |
## Advanced Settings
Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device and include any needed libraries. For AVR, the standard avr/io.h library is used; for STM32, the ChibiOS [PAL library](http://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used.
`public void `[`midi_register_cc_callback`](#group__input__callback__reg_1ga64ab672abbbe393c9c4a83110c8df718)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | Register a control change message (cc) callback.
`public void `[`midi_register_noteon_callback`](#group__input__callback__reg_1ga3962f276c17618923f1152779552103e)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | Register a note on callback.
`public void `[`midi_register_noteoff_callback`](#group__input__callback__reg_1gac847b66051bd6d53b762958be0ec4c6d)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | Register a note off callback.
`public void `[`midi_register_aftertouch_callback`](#group__input__callback__reg_1gaa95bc901bd9edff956a667c9a69dd01f)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | Register an after touch callback.
`public void `[`midi_register_pitchbend_callback`](#group__input__callback__reg_1ga071a28f02ba14f53de219be70ebd9a48)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | Register a pitch bend callback.
`public void `[`midi_register_songposition_callback`](#group__input__callback__reg_1gaf2adfd79637f3553d8f26deb1ca22ed6)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_three_byte_func_t func)` | Register a song position callback.
`public void `[`midi_register_progchange_callback`](#group__input__callback__reg_1gae6ba1a35a4cde9bd15dd42f87401d127)`(`[`MidiDevice`](#struct__midi__device)` * device,midi_two_byte_func_t func)` | Register a program change callback.
This is only called if a more specific callback is not matched and called. For instance, if you don't register a note on callback but you get a note on message the fall through callback will be called, if it is registered.
If registered, the catch all callback is called for every message that is matched, even if a more specific or the fallthrough callback is registered.
#### Parameters
*`device` the device associate with
*`func` the callback function to register
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.