* [Keyboard] Added Compound keyboard support
* Small fixes for Compound keyboard
* Fixed readme and header file for Compound keyboard
* Update keyboards/compound/rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Changed info.json and readme.md for Compound Keyboard
info.json - removed key_count
readme.md - changed PCB picture url to low-resolution
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Currently, this feature isn't supported on splits, spent about an hour troubleshooting my board and firmware before asking, and turns out it's not in place. Note added to save others from this in the future.
* use human-friendly formatting in info.json
* move layout macro aliases to info.json
* correct and complete layout data
Corrects the layout data for a few layouts, adds the missing data, and renames some of the layout macros.
- rename LAYOUT_wkl_ansi_2_right_mods to LAYOUT_65_ansi_wkl
- rename LAYOUT_wkl_ansi_3_right_mods to LAYOUT_65_ansi_lwkl
- rename LAYOUT_wkl_iso_2_right_mods to LAYOUT_65_iso_wkl
- rename LAYOUT_wkl_iso_3_right_mods to LAYOUT_65_iso_lwkl
* modernize acr60.h
- use #pragma once include guard
- add license header
- use four-space indent
- use QMK three-character notation for layout macro arguments
* human-friendly format info.json
* remove `key_count` keys from info.json
* rename LAYOUT_2_shifts to LAYOUT_all
* move LAYOUT_all to top
* use QMK three-character notation in info.json
* refactor default keymap
- add license header
- remove third layer (does nothing)
- replace Shift-Escape keycode with KC_GESC
- use LAYOUT_all macro instead of LAYOUT
* modernize readme.md
- update header
- convert metadata section to list
- add flashing and bootloader jump instructions
- update Docs links
* use #pragma once include guard in config.h
* update LED Indicator API
* add license headers
* correct layout macro references
The keyboard's header file and info.json referenced different layout macro names.
* correct layout data
Insert an object for the Non-US Backslash key, which was previously missing.
* 2x1800 2021
* add support for writing a whole frame at a time
* improvements
* wip
* fix scrolling
* small tweak
* add a buffer that's larger than the display
* add the start of a font
* working upper and lower case letters
* add qmk animation
* integrate the message sign into the qmk task system
* add encoder defaults
* add MAX7219_LED_CUSTOM to config.h
* tweaks
* remove unneeded keymaps
* add a keymap showing how to control the signboard
* cleanup
* cleanup
* add a way to disable the startup test
* make it easier to define options at the keymap level
* Fix define names
Co-authored-by: Greg Cochard <gcochard@users.noreply.github.com>
* Apply suggestions from gcochard
Co-authored-by: Greg Cochard <gcochard@users.noreply.github.com>
* feedback from noroads
* format info.json
Co-authored-by: Greg Cochard <gcochard@users.noreply.github.com>
* Added iso layer support for the GMMK Pro iso version
* Adjusted the mapping
* aligning with best practises
* aligning with comments from PR
* Added iso layout to info.json
Moves the ISO Enter keycode to the home row for more consistency with the rest of QMK. Also grid-aligns the keycodes and adds a block comment for the layout macro.
* human-friendly formatting
Add line breaks between rows and halves.
* fix rounding issues
Fixes issues with y-offset values due to rounding in KLE.
* remove layout dead space; re-mirror halves
Removes the empty white space from the layout, and aligns the keys on the right half so they are a mirror of the left half.
* rename LAYOUT to LAYOUT_all
* refactor default keymap
- add license header
- use layer_names enum
- use LAYOUT_all macro
- update keymap to be more generic
- use QMK-native keycode aliases
* info.json: human-friendly formatting
* convert LAYOUT_iso into a proper LAYOUT_60_iso
* LAYOUT_all bugfix
In the physical sense, position k3d is to the left of k3c.
* rework LAYOUT_max into LAYOUT_60_ansi_split_bs_rshift
* remove LAYOUT_iso_splitrshift and iso_split_rshift keymap
* rework LAYOUT_hhkb into LAYOUT_60_hhkb
* amj60.h cleanup
- add license header
- use #pragma once include guard
- concatenate layout block comments
- remove unnecessary function headers
* add license header to amj60.c
* align config.h to QMK template
* align rules.mk to QMK template
* enable Community Layout support
* modernize readme.md
- add PCB image
- convert keyboard data to list
- add flashing and bootloader instructions
- update Docs links
* scale layout data
Seems the KLE data that was imported to make the original file was scaled 1.25x. This commit removes the scaling.
* human-friendly formatting
Insert line breaks between physical layout rows.
* remove instances where width or height is set to 1
The width and height of a key is defaulted to 1 if not provided by the JSON data, so there's no reason to set it manually.
* correct layout data
Fix incorrect key sizes/positions.
* rename LAYOUT to LAYOUT_65_ansi_blocker
* tweak human-friendly formatting for info.json
Add new lines for new rows.
* adjust keycode alignment in via keymap
* clean up extra lines in readme file
* enable 65_ansi_blocker Community Layout support
* clean up rules.mk
Aligns the inline comments.
According to `helix/rev2/keymaps/fraanrosi/readme.md`, this keymap should be compiled with the following command:
```
make helix/rev2/under:fraanrosi
```
Therefore, when compiling all helix keymaps with the following command, an error occurs when compiling `fraanrosi`.
```
make helix:all
```
Therefore, add `LED_UNDERGLOW_ENABLE = yes` to `keymaps/fraanrosi/rules.mk` to suppress the error.
- Major change in the keymap to work with EurKey. Which relaxes some
constraints it had before when it had to take in consideration two
layouts.
With this the parenthesis can be moved to a better location instead
of being in the top right corner.
This also allows esc, del and rctrl to be moved to the base layer.
Only downside is that ctrl+lalt needed to be removed and instead
AltGr takes it's place. Add rctrl on right thumb cluster to
compensate for this which need some reorganization on the thumb
cluster.
- Split the symbol and function keys layer into two layers, one for
each hand. Make it easier to press symbols and function keys.
- Add some symbols specific for the EurKey layout.
- Change from running C-<tab> S-C-<tab> to page up/down for the right
rotary. As holding ctrl and using page up/down works the same in
firefox. Which allows the rotary to be useful for other things.
- Move scroll lock and insert to right rotary.
- Introducing close tap (CLO_TAP), which is a combination of the
double tap feature and my macros. E.g. pressing CLO_TAP and ( will
generate ()←. Which removes the need of the macros and makes it more
useful than DBL_TAP as it now saves me some keypresses. CLO_TAP exist
on both the left and right hand layers to make it easy to use.
- Use text for the secondary oled, firmware is too big after rebasing
on upstream master.
- Update image in the readme to reflect my new layout.
* Updated docs/ja/proton_c_conversion.md original tag.
* Updated docs/ja/other_vscode.md original tag.
* Updated docs/ja/feature_swap_hands.md original tag.
* Updated docs/ja/faq_general.md original tag.
* Updated docs/ja/feature_userspace.md original tag.
* Updated git co docs/ja/config_options.md original tag.
* [Keyboard] Set reasonable defaults for Corne keyboard
* Add note about bootmagic
* Make bootmagic config super weak
* cleanup
* Apply suggestions from code review
* Update keyboards/crkbd/readme.md
* correct info.json data
Removes an extra key object, and corrects the layout macro reference.
* refactor rules.mk file
- remove invalid `LAYOUTS` rule
- edits the rules.mk file to more closely resemble the file from QMK's AVR template.
* additional rules.mk cleanup per fauxpark
Apply suggestions from code review
* adjust key positioning in Configurator
Some of the keys were visually overlapping when rendered. Adjusted the key positioning to remove the overlaps.
* update readme.md
- fix a broken URL
- rewrite the Bootloader access instructions
- remove trailing whitespace
Fix reddit link
Duplicate open parenthesis next to close parenthesis on NSSL
Add customisation instructions
Add lily58
Add gergo
Co-authored-by: Jonathan Dayton <jonathandayton23@gmail.com>
Clean up LAYOUT macro formatting
Add alternative vi-style navigation layout
Add kyria
Add minidox
Change order of keyboards
Add iris
Expand TOC
Re-order userspace subheadings
Add atreus
Add customisation section
Add split_3x5_3 and split_3x6_3 layouts
Add for_science
Fix wrong paths in keyboard config.h and keymap.c headings
Fix keyboard ordering
Fix blank lines around headings
Add compatibility with new org-mode version.
Remove keyboards/crkbd now covered by layouts/split_3x6_3
Add Halmak
Alphabetise alternative alpha arrangements
Move build options out of base layer alphas headings
Add list of keyboards supporting split_3x5_3 layout
Enable Auto Shift and Retro Shift
Add Retro Shift (Auto Shift for Tap Hold via Retro Tapping)
Change kyria thumb key mapping
Add planck_mit layout
Remove alternative bottom row support from ortho_4x12
Remove minidox
- Covered by split_3x5_3 layout
Add moonlander
Remove KC_ macros
Add 60_ansi layout
Add ortho_5x15 layout
Closesmanna-harbour/qmk_firmware#5
Co-authored-by: Rob <rob@debank.tv>
Fix typo (manna-harbour/qmk_firmware#7)
Author: sonnius <sonnius@users.noreply.github.com>
Add redox_w (manna-harbour/qmk_firmware#8)
Author: Brian Romanko <hello@bromanko.com>
Co-authored-by: Manna Harbour <51143715+manna-harbour@users.noreply.github.com>
Add AUTO_SHIFT_NO_SETUP to reduce firmware size
Update image paths
Add instructions to checkout development branch
Add kyria extended thumbs option, change default, add KLE
Change clipboard keys
- Change order to be mirror of windows bindings
- Change default to use CUA bindings for Cut, Copy, and Paste, and Fun Cluster
bindings for Undo and Redo
- Add alternative bindings
- Fun Cluster (original miryoku bindings)
- Mac
- Windows
- Change prefix for local macros from X_ to U_
Disable Retro Shift, enable Auto Shift for non-alphas
Revert "Add Retro Shift (Auto Shift for Tap Hold via Retro Tapping)"
Add Experimental Features section
Update miryoku image link
Update cover image link
Add dactyl_manuform/4x5
Add cutomisation examples
Add https to remote example
Fix dactyl_manuform/4x5 subset mapping
Add extended thumbs to ortho_4x12
Update Colemak Mod-DH naming
Closesmanna-harbour/qmk_firmware#13
Add dactyl_manuform/5x6
Resolvesmanna-harbour/qmk_firmware#14
Co-authored-by: Sebastian Morales <sebastian.moralesd@gmail.com>
Add note on FORCE_LAYOUT
- Needed to use EXTENDED_THUMBS on planck
Add parent directories to keyboard headings and re-order
Add keyboardio/atreus
Resolvesmanna-harbour/qmk_firmware#15
Add torn
Resolvesmanna-harbour/qmk_firmware#16
Author: Brian Romanko <hello@bromanko.com>
Co-authored-by: Manna Harbour <51143715+manna-harbour@users.noreply.github.com>
Change map to zip
- Adds support for python3, still compatible with python2.
Resolvesmanna-harbour/qmk_firmware#10Resolvesmanna-harbour/qmk_firmware#19
Co-authored-by: Ori <ori@oribarbut.com>
Add python-version
Add sofle
Add ergotravel
Add ortho_5x12
Add ortho_4x10
Add :main no header argument to C code blocks
resolvesmanna-harbour/qmk_firmware#11resolvesmanna-harbour/qmk_firmware#12
Co-authored-by: RubioJr9 <u0893472@utah.edu>
Add flipped layers and inverted-T nav alternative layouts
- Separate tap_table into alphas_table and thumbs_table
- Add mode argument to table-layout-half
- Remove layer_name
- Rename layers
- Add mods and clipboard to MBO and mirror
- Add MIRYOKU_LAYERS=FLIP
- Add MIRYOKU_NAV=INVERTEDT
Add layer diagrams
Update contact section
Update links for Bilateral Combinations and Retro Shift
Add description and no reverse angle option to 60_ansi layout
Update list of keyboards supporting community layouts
- and example build command lines
Change moonlander thumb keys
Update list of keyboards supporting split_3x5_3
Add license to tangled C source files
* Updated docs/ja/how_a_matrix_works.md original tag.
* Updated docs/ja/api_overview.md original tag.
* Updated docs/ja/contributing.md original tag
* Updated docs/ja/coding_conventions_c.md original tag
* Updated docs/ja/reference_configurator_support.md original tag
* Updated docs/ja/reference_glossary.md original tag
* Updated docs/ja/api_docs.md original tag
* Updated docs/ja/feature_stenography.md original tag
* Updated docs/ja/documentation_templates.md original tag
* Updated docs/ja/faq_keymap.md original tag
* Updated docs/ja/understanding_qmk.md original tag
* cleaning up
* deleting to undelete
* Stub out defaults
* Jabberwocky firmware WIP
* Stubbing out keymap spacing
* Default keymap and layout updates
* start stubbing out JSON for configurator
* more WIP
* Update jabberwocky.h
* Add Readme
* Apply suggestions from code review
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Fix layout capitalization
* Updates to personal and default keymaps
* Add instructions for jumping the bootloader
* Update keyboards/nopunin10did/jabberwocky/rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Add easier ctrl-alt-del to my keymap
* Undo changes from other master
* Add back DYNAMIC_KEYMAP_LAYER_COUNT constant
* Fix readme markup to use list items
* Give my layout VIA compatibility
Co-authored-by: Rossman360 <rmontsinger@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* grid align layout macro and keymaps
* physically arrange layout macro, phase 1
* physically arrange layout macro, phase 2
* replace KC_PAUSE with KC_PAUS
Makes the grid alignment nice. :)
* rename LAYOUT_65_ansi to LAYOUT_all
The included layout macro isn't actually correct for QMK's 65% ANSI community layout.
* add an actual LAYOUT_65_ansi
This is a semi-educated guess as to this macro; it may be wrong.
* physically arrange layout macro
Arranges the layout macro and keycodes to resemble the assembled keyboard.
* correct info.json data
Corrects the key sequence and positioning in info.json.
* correct layout data
* use LAYOUT as layout macro name
The defined LAYOUT_daisy is functional, but Configurator expects LAYOUT through the info.json file. As the board only supports one layout according to the open-source PCB files, use LAYOUT as the defined macro per QMK guidelines.
* add layout macro alias
* grid-align layout macro and keymaps
* physically align layout macro and keycodes
Arrange the layout macro and keycodes to resemble the assembled keyboard.
* update info.json data
Updates the info.json data to be correct to the new layout macro.
* Add SquishyTKL
* Add SquishyTKL-FRL
* Adjust readme.md and info.json
* Add JIS support for SquishyTKL
* Fix JIS layout macro
* Fix via layout and keymap
* Migrate SquishyTKL to STM32duino bootloader
* Make chibios conf files generic
* Change TKL via keymap to match number of layers
* Apply chibios changes to FRL as well
* Adjust README regarding flashing with dfu-util
* Add license and header guard
* Added custom Keymap
* Added Images to README
* Added Layer 1 Keys for RGB control
* Added GPL2+ License to keymap.c
* Removed extra json files and added a few lines to README
It so happens that when releasing the control key prior to the main key (C-h, C-i, C-n,
...), the substituted keycode was continuously sent in a loop after that (even when
releasing said key). The workaround so far was to type any other key to stop the loop.
This commit fixes such behavior by resetting the substitution keycode sent when the ctrl
released situation conditional is detected (and that the substitution keycode was on).
* add keyboard new macro pad "Kuro"
* change main readme.md
* remove not used code from default/keymap.c
* Remove unnecessary code
* Supports info.json
* removed back slash and not used functions.
* update at product link. add japanese messages.
* Merge All
* [Shiro]Add MacKeymap
* Change key code. Numpad→Numkey
* Made OLED splash screen optional to reduce memory and fixed OLED i2c execution time saving
* moved OLED address updates into their respective conditional checks
* Avoid zero or overflow from user's rgb_matrix_config.speed
* Avoid zero tick for reactive splash.
* Avoid zero time for animation runner.
Co-authored-by: filterpaper <filterpaper@localhost>
* adding revision A
* Update keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.h
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update readme.md
Adding instruction on how to enter bootloader
* adding instruction on how to enter bootloader (DFU)
adding instruction on how to enter bootloader (DFU)
* updated description
* Update keyboards/4pplet/eagle_viper_rep/rev_a/halconf.h
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/rev_a.c
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/config.h
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/chconf.h
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Update keyboards/4pplet/eagle_viper_rep/rev_a/chconf.h
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Update keyboards/4pplet/eagle_viper_rep/keymaps/default/keymap.c
Co-authored-by: Nick Brassel <nick@tzarc.org>
* Restoring palSetLineMode for working underglow
I was experiencing the same issue as this: https://github.com/qmk/qmk_firmware/issues/12655#issuecomment-844104659
sigprof helped me resolve this issue.
* Update rev_a.c
removing palSetLineMode again, works great after rebase. Thanks!
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
The rev3 boards use RGBLIGHT_ENABLE now instead of BACKLIGHT_ENABLE.
This resolves the issue of flashing and losing functionality with the default keymap.
Added missing closing comment bit */
This seems to cause the QMK configurator to break when clicking the compile button:
Compiling: keyboards/handwired/split89/split89.c In file included from [K:
ent]
/* COL2ROW, ROW2COL */
[K
cc1: all warnings being treated as errors
|
|
|
make: *** ine/keyboards/handwired/split89/split89.o] Error 1
This binary keymap for ANAVI Macro Pad 2 helps with 0 and 1:
left key: 0
right key: 1
Combo press both keys to control the backlit.
Suggested-by: Chris <christopher.walker@crowdsupply.com>
Signed-off-by: Leon Anavi <leon@anavi.org>
* Top level heading for common config
Prior to this, the some of the common config looks like a detail of the APA102 driver
* Change heading to Common Config (RGB Matrix)
This commit makes atmel-dfu and chibios-dfu bootloaders retry to detect the bootloader
every 0,5 seconds (now configurable via the BOOTLOADER_RETRY_TIME makefile variable),
and a period is printed after every try. This is a much more pleasant behaviour than
the 5s retry timeout.
This keymap for ANAVI Macro Pad 2 contains a couple of Skype
shortcuts for MS Windows and GNU/Linux distributions:
- Ctrl+M: Mute/unmute microphone
- Ctrl+Shift+K: Start/stop camera
Signed-off-by: Leon Anavi <leon@anavi.org>
* Set bootloader to stm32-dfu for STM32F303
* Set bootloader to stm32-dfu for STM32F0x2
* Set bootloader to stm32-dfu for STM32F4x1
* Set bootloader to stm32duino for sowbug
* Delete redundant bootloader_defs headers
* Add some missing MCU name comments
* Move APM32 dfu-suffix overrides underneath bootloader
* Remove redundant STM32_BOOTLOADER_ADDRESS defines/rules
* [Keymap] merge jdelkins userspace and associated keymaps
* Add copyright & license info
* Change rgblight_config.enable to rgblight_is_enabled()
* Update keyboards/dz60/keymaps/jdelkins/keymap.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/dz60/keymaps/jdelkins/keymap.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Update keyboards/dz60/keymaps/jdelkins/keymap.c
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Remove superfluous includes
* Change EXTRAFLAGS+=-flto to LTO_ENABLE=yes
* Remove unnecessary jdelkins_ss symlink in users
* Add copyright and license notices
* Use preferred way to determine capslock / numlock state
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Add #pragma once to a header
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Include QMK_KEYBOARD_H only once, in userspace header
* Remove unnecessary initialization in matrix_init_keymap
* Do process_record_keymap before cases handled in process_record_user
* Reorganize & simplify secrets feature enablement
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove superfluous break
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove copyright from rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove copyright from rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* include "print.h" instead of <print.h>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_cod16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove copyright from rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* add #pragma once to a header
Co-authored-by: Ryan <fauxpark@gmail.com>
* include "print.h" instead of <print.h>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove copyright from rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove copyright from rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove copyright from rules.mk
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use tap_code16
Co-authored-by: Ryan <fauxpark@gmail.com>
* Use :flash target where possible
* Remove special case flash target and use PROGRAM_CMD
* dz60/jdelkins_ss: use tap_code16
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
The code using sprintf() did not fit into flash when `merge/um70:via`
was compiled with avr-gcc 5.4.0:
* The firmware is too large! 29756/28672 (1084 bytes over)
Replacing `sprintf(wpm_str, " %03d", current_wpm);` with custom
formatting code reduces the firmware size by 1504 bytes, which is enough
to make the `merge/um70:via` firmware fit:
* The firmware size is approaching the maximum - 28252/28672 (98%, 420 bytes free)
* Add Per Key functionality for AutoShift (#11536)
* LED Matrix: Reactive effect buffers & advanced indicators (#12588)
* [Keyboard] kint36: switch to sym_eager_pk debouncing (#12626)
* [Keyboard] kint2pp: reduce input latency by ≈10ms (#12625)
* LED Matrix: Split (#12633)
* [CI] Format code according to conventions (#12650)
* feat: infinite timeout for leader key (#6580)
* feat: implement leader_no_timeout logic
* docs(leader_key): infinite leader timeout docs
* Format code according to conventions (#12680)
* Update ADC driver for STM32F1xx, STM32F3xx, STM32F4xx (#12403)
* Fix default ADC_RESOLUTION for ADCv3 (and ADCv4)
Recent ChibiOS update removed ADC_CFGR1_RES_10BIT from the ADCv3 headers
(that macro should not have been there, because ADCv3 has CFGR instead of
CFGR1). Fix the default value for ADC_RESOLUTION to use ADC_CFGR_RES_10BITS
if it is defined (that name is used for ADCv3 and ADCv4).
* Update ADC docs to match the actually used resolution
ADC driver for ChibiOS actually uses the 10-bit resolution by default
(probably to match AVR); fix the documentation accordingly. Also add
both ADC_CFGR_RES_10BITS and ADC_CFGR1_RES_10BIT constants (these names
differ according to the ADC implementation in the particular MCU).
* Fix pinToMux() for B12 and B13 on STM32F3xx
Testing on STM32F303CCT6 revealed that the ADC mux values for B12 and
B13 pins were wrong.
* Add support for all possible analog pins on STM32F1xx
Added ADC mux values for pins A0...A7, B0, B1, C0...C5 on STM32F1xx
(they are the same at least for STM32F103x8 and larger F103 devices, and
also F102, F105, F107 families). Actually tested on STM32F103C8T6
(therefore pins C0...C5 were not tested).
Pins F6...F10, which are present on STM32F103x[C-G] in 144-pin packages,
cannot be supported at the moment, because those pins are connected only
to ADC3, but the ChibiOS ADC driver for STM32F1xx supports only ADC1.
* Add support for all possible analog pins on STM32F4xx
Added ADC mux values for pins A0...A7, B0, B1, C0...C5 and optionally
F3...F10 (if STM32_ADC_USE_ADC3 is enabled). These mux values are
apparently the same for all F4xx devices, except some smaller devices may
not have ADC3.
Actually tested on STM32F401CCU6, STM32F401CEU6, STM32F411CEU6 (using
various WeAct “Blackpill” boards); only pins A0...A7, B0, B1 were tested.
Pins F3...F10 are inside `#if STM32_ADC_USE_ADC3` because some devices
which don't have ADC3 also don't have the GPIOF port, therefore the code
which refers to Fx pins does not compile.
* Fix STM32F3xx ADC mux table in documentation
The ADC driver documentation had some errors in the mux table for STM32F3xx.
Fix this table to match the datasheet and the actual code (mux settings for
B12 and B13 were also tested on a real STM32F303CCT6 chip).
* Add STM32F1xx ADC pins to the documentation
* Add STM32F4xx ADC pins to the documentation
* Add initial support for tinyuf2 bootloader (when hosted on F411 blackpill) (#12600)
* Add support for jumping to tinyuf2 bootloader. Adds blackpill UF2 example.
* Update flashing.md
* Update chconf.h
* Update config.h
* Update halconf.h
* Update mcuconf.h
* eeprom driver: Refactor where eeprom driver initialisation (and EEPROM emulation initialisation) occurs to make it non-target-specific. (#12671)
* Add support for MCU = STM32F446 (#12619)
* Add support for MCU = STM32F446
* Update platforms/chibios/GENERIC_STM32_F446XE/configs/config.h
* Restore mcuconf.h to the one used by RT-STM32F446RE-NUCLEO64
* stm32f446: update mcuconf.h and board.h for 16MHz operation, with USB enabled, and other peripherals disabled.
* Format code according to conventions (#12682)
* Format code according to conventions (#12687)
* Add STM32L433 and L443 support (#12063)
* initial L433 commit
* change to XC
* fix L433
* disable all peripherals
* update system and peripheral clocks
* 433 change
* use its own board files
* revert its own board files
* l433 specific change
* fix stm32l432xx define
* remove duplicate #define
* fix bootloader jump
* move to L443xx and add i2c2, spi2, usart3 to mcuconf.h
* move to L443
* move to L443
* fix sdmmc in mcuconf.h
* include STM32L443
* add L443
* Include L443 in compatible microcontrollers
* Include L443 in compatible microcontrollers
* Update config bootloader jump description
* Update ChibiOS define reasoning
* Update quantum/mcu_selection.mk
* fix git conflict
* Updated Function96 with V2 files and removed chconf.h and halconf.h (#12613)
* Fix bad PR merge for #6580. (#12721)
* Change RGB/LED Matrix to use a simple define for USB suspend (#12697)
* [CI] Format code according to conventions (#12731)
* Fixing transport's led/rgb matrix suspend state logic (#12770)
* [CI] Format code according to conventions (#12772)
* Fix comment parsing (#12750)
* Added OLED fade out support (#12086)
* fix some references to bin/qmk that slipped in (#12832)
* Resolve a number of warnings in `qmk generate-api` (#12833)
* New command: qmk console (#12828)
* stash poc
* stash
* tidy up implementation
* Tidy up slightly for review
* Tidy up slightly for review
* Bodge environment to make tests pass
* Refactor away from asyncio due to windows issues
* Filter devices
* align vid/pid printing
* Add hidapi to the installers
* start preparing for multiple hid_listeners
* udev rules for hid_listen
* refactor to move closer to end state
* very basic implementation of the threaded model
* refactor how vid/pid/index are supplied and parsed
* windows improvements
* read the report directly when usage page isn't available
* add per-device colors, the choice to show names or numbers, and refactor
* add timestamps
* Add support for showing bootloaders
* tweak the color for bootloaders
* Align bootloader disconnect with connect color
* add support for showing all bootloaders
* fix the pyusb check
* tweaks
* fix exception
* hide a stack trace behind -v
* add --no-bootloaders option
* add documentation for qmk console
* Apply suggestions from code review
* pyformat
* clean up and flesh out KNOWN_BOOTLOADERS
* Remove pointless SERIAL_LINK_ENABLE rules (#12846)
* Make Swap Hands use PROGMEM (#12284)
This converts the array that the Swap Hands feature uses to use PROGMEM,
and to read from that array, as such. Since this array never changes at
runtime, there is no reason to keep it in memory. Especially for AVR
boards, as memory is a precious resource.
* Fix another bin/qmk reference (#12856)
* [Keymap] Turn OLED off on suspend in soundmonster keymap (#10419)
* Fixup build errors on `develop` branch. (#12723)
* LED Matrix: Effects! (#12651)
* Fix syntax error when compiling for ARM (#12866)
* Remove KEYMAP and LAYOUT_kc (#12160)
* alias KEYMAP to LAYOUT
* remove KEYMAP and LAYOUT_kc
* Add setup, clone, and env to the list of commands we allow even with broken modules (#12868)
* Rename `point_t` -> `led_point_t` (#12864)
* [Keyboard] updated a vendor name / fixed minor keymap issues (#12881)
* Add missing LED Matrix suspend code to suspend.c (#12878)
* LED Matrix: Documentation (#12685)
* Deprecate `send_unicode_hex_string()` (#12602)
* Fix spelling mistake regarding LED Matrix in split_common. (#12888)
* [Keymap] Fix QWERTY/DVORAK status output for kzar keymap (#12895)
* Use milc.subcommand.config instead of qmk.cli.config (#12915)
* Use milc.subcommand.config instead
* pyformat
* remove the config test
* Add function to allow repeated blinking of one layer (#12237)
* Implement function rgblight_blink_layer_repeat to allow repeated blinking of one layer at a time
* Update doc
* Rework rgblight blinking according to requested change
* optimize storage
* Fixup housekeeping from being invoked twice per loop. (#12933)
* matrix: wait for row signal to go HIGH for every row (#12945)
I noticed this discrepancy (last row of the matrix treated differently than the
others) when optimizing the input latency of my keyboard controller, see also
https://michael.stapelberg.ch/posts/2021-05-08-keyboard-input-latency-qmk-kinesis/
Before this commit, when tuning the delays I noticed ghost key presses when
pressing the F2 key, which is on the last row of the keyboard matrix: the
dead_grave key, which is on the first row of the keyboard matrix, would be
incorrectly detected as pressed.
After this commit, all keyboard matrix rows are interpreted correctly.
I suspect that my setup is more susceptible to this nuance than others because I
use GPIO_INPUT_PIN_DELAY=0 and hence don’t have another delay that might mask
the problem.
* ensure we do not conflict with existing keymap aliases (#12976)
* Add support for up to 4 IS31FL3733 drivers (#12342)
* Convert Encoder callbacks to be boolean functions (#12805)
* [Keyboard] Fix Terrazzo build failure (#12977)
* Do not hard set config in CPTC files (#11864)
* [Keyboard] Corne - Remove legacy revision support (#12226)
* [Keymap] Update to Drashna keymap and user code (based on develop) (#12936)
* Add Full-duplex serial driver for ARM boards (#9842)
* Document LED_MATRIX_FRAMEBUFFER_EFFECTS (#12987)
* Backlight: add defines for default level and breathing state (#12560)
* Add dire message about LUFA mass storage bootloader (#13014)
* [Keyboard] Remove redundant legacy and common headers for crkbd (#13023)
Was causing compiler errors on some systems.
* Fix keyboards/keymaps for boolean encoder callback changes (#12985)
* `backlight.c`: include `eeprom.h` (#13024)
* Add changelog for 2021-05-29 Breaking Changes merge (#12939)
* Add ChangeLog for 2021-05-29 Breaking Changes Merge: initial version
* Add recent develop changes
* Sort recent develop changes
* Remove sections for ChibiOS changes per tzarc
No ChibiOS changes this round.
* Add and sort recent develop changes
* add notes about keyboard moves/deletions
* import changelog for PR 12172
Documents the change to BOOTMAGIC_ENABLE.
* update section headings
* re-sort changelog
* add additional note regarding Bootmagic changes
* remove changelog timestamp
* update dates in main Breaking Changes docs
* fix broken section anchors in previous changelogs
* add link to backlight/eeprom patch to changelog
* highlight some more changes
* link PRs from section headers
* Restore standard readme
* run: qmk cformat --core-only
* Align our subprocess usage with current best practices.
* remove unused import
* Apply suggestions from code review
Co-authored-by: Ryan <fauxpark@gmail.com>
* fix the cpp invocation for older python
* allow for unprompted installation
* make sure qmk new-keyboard works on windows
Co-authored-by: Ryan <fauxpark@gmail.com>
This keymap contains the following shortcuts for Microsoft Teams
on MS Windows and GNU/Linux distributions:
- Ctrl+Shift+M: Toggle mute
- Ctrl+Shift+O: Toggle video (doesn't work in a web browser)
NOTE: Mac users should replace Ctrl with Command in all shortcuts
Signed-off-by: Leon Anavi <leon@anavi.org>
* Create piv3rt's keymap
* Use tabs's LED as a caps lock indicator
* Fix indentation (tabs -> spaces)
* Set inital LED matrix color & mode
* Rename layers and add an RGBRST keycode
* Disable unused RGB effects
* Add RGB profiles
* Use ESC's LED as a num lock indicator
* Light up the keypad when _NUM layer is active
* Realign layers
* Remove legacy layer
* Fix CAPS key macro
* Reduce TAPPING_TERM to 100
* Change the caps LED to red and display the numlock one on special layers
* Add french accentuated caps + minor improvements on layers
* Remove left numpad
* Add french quotation marks
* Add key KC_NUBS
* Add terminal copy/paste
* Disable led profile on wakeup
* Change the default color
* Add AMD replay and record keys
* Add a MacOS layer
* Move Numpad
* Add GPLv2 license information
* Optimise custom RGB matrix
* Move keypad toggle and disable MAC led indicator
* Remove unnecessary check for RGB matrix
* Initial configuration with led and three layers
+ First layer contains classic keys
+ Second layer contains F keys and media keys
+ Third layer contains numbers in the top portion of the letter keys
+ Default LEDs configuration
* RGB toggle
* Documentation and minor changes
* Added LGUI key and remapped layer 2 on layer 1
* Removed backlight and led keys
* Updated keymap graphical representation
* Switched LGui with Lalt to emulate macOS layout
* Updated keymap with GNU License
* Some fixes for the Bakeneko variant DB60s
* Add copyright to header
* Add .python-version to gitignore for people who use pyenv or similar
* update readme
* Add more readmes
* Add more readmes
* Update the versions to have different product IDs
* Update readme
* Add missing rules.mk
* Fix matrix on hotswap
* remove iso from hotswap
* Fix hotswap spacebar
* Revert gitignore changes
* Fix layouts
* Apply suggestions from code review
Co-authored-by: Ryan <fauxpark@gmail.com>
* Add split configs
* Apply suggestions from code review
Co-authored-by: Ryan <fauxpark@gmail.com>
* Add license to config
* or equivalent
Co-authored-by: Ryan <fauxpark@gmail.com>
* add custom keymaps for BM68rgb
* add user keymap for bm68rgb
* fix grammar
* add custom hub16 keymap
* Apply suggestions from code review
* fix errorenously included hub16 file
* add GPL headers
* revert defining dfa_state in keymap.h
* Update keyboards/bm68rgb/keymaps/peepeetee/keymap.h
* enable tap dance, add tap dance to left alt
* move the module checking and updating to lib/python
* make flake8 happy
* Update lib/python/qmk/cli/__init__.py
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
* prompt the user to disable developer mode
* pyformat
* flake8
Co-authored-by: Erovia <Erovia@users.noreply.github.com>
* add a test and dry-run to qmk generate-api
* add a dry-run to qmk pyformat
* Add a --dry-run to qmk cformat
* reverse the order of nose2 and flake8 tests
* run CI test against cformat and pyformat
* fix programming errors
* tweak job name
* fix argument
* refine the files we select
* fix stack trace in --ci
* make cformat exit clean
* fix c file extensions
* decouple CI from pyformat
* remove --ci arg
* make ci happy
* use the environment var instead
* change output to text
* fix log message
* replace tabs
* resynced with upstream, and adjusted keymap layout for planck
* updated keyboard layout
Signed-off-by: Sean Johnson <sean@ttys0.net>
* swapped out bspc for del on symb layer
Signed-off-by: Sean Johnson <sean@ttys0.net>
* fixed typo with brightness media keys
* turns out my brightness config was correct, it was macOS that had gone sideways
* updated to bring in line with requirements for merging into upstream
* removed redundant config from rules.mk
moved media controls to FUNC layer for Planck layout
* added GPL2+ compatible license header
Signed-off-by: Sean Johnson <sean@skj.dev>
* removed unused MIDI comment
Signed-off-by: Sean Johnson <sean@skj.dev>
* removed extraneous MIDI comments
* removed extraneous comments
* update for LTO and guard RGBLED_SPLIT
* Revert "update for LTO and guard RGBLED_SPLIT"
This reverts commit ce81177cbe.
* Revert "Revert "update for LTO and guard RGBLED_SPLIT""
This reverts commit 67da0ce9f3.
* update iris keymap for keymap_kc removal and overhaul userspace
* add licenses
* fix tap_dance error when rgblight is disabled and update/clean iris/sinc maps
The easiest way to install QMK CLI and all the necessary
dependencies on FreeBSD is to use the packages
from the official FreeBSD Ports Collection.
This is possible since QMK CLI has been added to the Ports Collection:
https://www.freshports.org/sysutils/py-qmk/
When the USB device is connected, FreeBSD creates not one, but three
device nodes in /dev, e.g.: /dev/ttyU0, /dev/ttyU0.init, and
/dev/ttyU0.lock.
As a result, this leads to the USB variable containing 3 paths
(and therefore, whitespace) and messages like this one:
Device /dev/ttyU0
/dev/ttyU0.init
/dev/ttyU0.lock has appeared; assuming it is the controller.
This changes fixes the use of the -z flag of "[" (see test(1)). Also, it
removes undesired paths from the USB variable, leaving only
one path there (i.e., "/dev/ttyU0").
* Add andromeda to qmk
* Fix
* Another fix
* Fix via map
* Update andromeda
* Update confs for new qmk master
* Apply suggestions from code review
* Remove the ch hal and mcu conf as the andromeda does not need extra peripherals
* Update keyboards/ai03/andromeda/rules.mk
* Apply suggestions from code review
* Add bootloader note to readme
* [Keyboard] added Time 80 Reforged by Fox Lab
* added Time 80 Reforged by Fox Lab
* split to two sub directories for universal and hotswap pcb
* Apply suggestions from code review
* Modified codes as suggested
* update code as suggested
* rgb log light keymaps added
* update code as suggested
* enable rgblight right to TIME logo, and add keymaps for it's control
* Apply suggestions from code review
* enable built-in switch LED support
* Apply suggestions from code review
* Apply suggestions from code review
* Apply suggestions from code review
* Apply suggestions from code review
* Set Dvorak as the standard base layer
* Remove unneeded includes
* Remove custom handling for Quake 2
Have now rewritten my in-game configuration to use Dvorak mapping instead of QWERTY, which means I don't need any of this stuff.
* Clean up comments in KC60 keymap
* Allow <keyboard>.h to be optional when going data driven
* Remove stub files as no longer required
* Rename function
* Remove include of layouts.h for now
* Take advantage of type=keyboard_folder
* Take advantage of type=keyboard_folder - kb should still be mandatory
* add info.json file
* refactor keymaps for readability
* rework layout macro
Arranges the layout macro and keycodes to resemble the physical layout.
* readme touch-up
Corrections to capitalization and spelling, and removal of extra white space.
* Added WholesomeDucky keymap for GMMK Pro
* Finalized keymap & added 1000hz polling for GMMK Pro
* Corrected for RAlt and Fn being swapped
* Fixed RAlt and Fn being swapped in the layout definition. Updated personal keymap to reflect fixed layout.
* Removed an old comment from personal keymap for GMMK Pro
* added VIA support
* Defined bootmagic row and column for GMMK Pro Esc key
* Update keyboards/gmmk/pro/config.h
* Update keyboards/gmmk/pro/keymaps/via/keymap.c
* Update keyboards/gmmk/pro/keymaps/via/keymap.c
* peepeetee's bodged hub16 keymap
* add layer 3 lighting
* actually adds layer 3 lighting
* fixes layer 0; behavior is that layor 0 is unaltered from base pattern, while other states have distinct solid colors
Tap dance callbacks may register weak mods; one case when it happens
is when a tap dance registers a key with modifiers. When the tap
dance is interrupted by pressing another key, these weak mods could
affect the interrupting key (normally any stale weak mods are cleared
at the start of action_exec() when handling a keypress event, but the
tap dance interrupt check code is called later, and the weak mods left
by that code were not cleared). Add another clear_weak_mods() call to
preprocess_tap_dance() to make sure that the interrupting keypress is
not affected by unrelated weak mods from the previous tap dance.
Fixes#12445.
* Fix how USB queue overflow is handled in chibios.
This commit reverts PR 12472 (commit c823fe2d3f),
and it implements the original intent of the commit in a better way.
The original intent of the above mentioned commit was to not deadlock the
keyboard when console is enabled, and hid_listen is not started.
The above mentioned commit had a few drawbacks:
1) When a lot of data was printed to the console, the queue would get full,
and drop data, even if hid_listen was running. (For example having matrix debug
enabled just didn't work right at all)
2) I believe the function in which this was implemented is used by all other
USB endpoints, so with the above change, overflow, and data loss could
happen in other important functions of QMK as well.
This commit implements deadlock prevention in a slightly similar way to how
it's done on AVR. There is an additional static local variable, that memorizes
whether the console has timeouted before. If we are in the timeouted=false
state, then we send the character normally with a 5ms timeout. If it does
time out, then hid_listen is likely not running, and future characters should
not be sent with a timeout, but those characters should still be sent if there
is space in the queue. The difference between the AVR implementation and this
one is that the AVR implementation checks the queue state directly, but this
implementation instead attempts to write the character with a zero timeout.
If it fails, then we remain in the timeouted=true state, if it succeeds, then
hid_listen started removing data from the queue, so we can go out of the
timeouted=true state.
* Added comment explaining the timeouted logic to console flow control.
* Console flow control: refactor chibios flowcontrol code to make it more readable, and rename the timeouted variable to timed_out on both chibios and lufa. Changed comments to says timed_out is an approximation of listener_disconnected, to make it clear that it's not the same thing
* fix typo
* Add RGB matrix suspend wake function for Planck/rev6
* Update suggested definition to allow user override.
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: filterpaper <filterpaper@localhost>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Git keymap for ANAVI Macro Pad 8 with the following shortcuts.
On the first row from left to right:
- git status
- git log
- git pull
- git push
On the second row from left to right:
- git diff
- git add
- git commit
- FN key to switch to the 2nd layout and control lights
Reduce the number of supported RGB animations and effects in
config.h to shrink the firmware size and fit it on the device.
Signed-off-by: Leon Anavi <leon@anavi.org>
The keymap for this PCB as of April 5, 2020 has a 4rth, largely superfluous layer, creating a total of 5 layers.
When ported to VIA, this results in a layer that users can access but cannot edit. I propose removing this layer completely along with it's access from the default.
The dac_basic driver did not work properly with `#define AUDIO_PIN A4`
(instead of configuring the A4 pin, the driver actually was switching
the A5 pin to analog mode, breaking any other usage of that pin in
addition to emitting a distorted signal on the improperly configured
A4 pin). Fix the code to configure the A4 pin as intended.
- Use normal ChibiOS I2C driver.
- Move drawing code to housekeeping -- previously it was during matrix
scan, which gets executed during bootmagic checks. However, bootmagic
is invoked before QWIIC subsystem is enabled, which means I2C isn't
configured yet. All I2C calls to the OLED fail with timeouts while
bootmagic is being checked. Housekeeping ensures this is executed once
the system has initialised and settled.
- QWIIC OLED driver: properly clear out OLED buffer when clearing screen.
This keymap for ANAVI Macro Pad 2 contains a couple of shortcuts
for Google Meet:
- left key: turn on/off the microphone (mute button)
- right key: turn on/off the camera
Signed-off-by: Leon Anavi <leon@anavi.org>
Clarify that the link to the github/forking instructions is a link to how to fork this project. Previous wording implied that the link was to a how-to-use github in general page.
Before this commit, attaching an ARM-based (i.e. ChibiOS-based) keyboard that
uses CONSOLE_ENABLE = yes and produces debug messages would deadlock the
keyboard unless one was running hid_listen.
With this commit, dead-locking writes to the queue are detected and prevented.
fixes#5631
* cleanup keyboards/helix/{rev2|rev3_5rows}/keymaps/five_rows
* Made the layout data easier to read.
* helix/rev2/keymaps/five_rows/keymap.c
* helix/rev3_5rows/keymaps/five_rows/keymap.c
* The following two were made the same.
* keymaps/five_rows/config.h
* keymaps/five_rows/oled_display.c
The binary of the compilation result has not changed.
* update keyboards/helix/rev2/keymaps/five_rows/rules.mk
KEYBOARD_LOCAL_FEATURES_MK was moved to the end.
* add '#define DISABLE_SYNC_TIMER' into helix/rev3_5rows/keymaps/five_rows/config.h
The sync timer features worsen the matrix scan rate of the Helix keyboard. I'm not sure if it makes sense to have sync timer features enabled on the Helix keyboard. So in my keymap I disable this.
This resolves to <https://pypi.org/project/Wave/>, but the places where
the `wave` module is imported make it clear that the standard library
module <https://docs.python.org/3/library/wave.html> was intended.
Was originally added in #11820 and used in the following files:
* `util/sample_parser.py`
* `util/wavetable_parser.py`
* [nix] Update nixpkgs to avoid issues with Big Sur
The older nixpkgs snapshot did not contain nix changes to the
compiler/linker hooks that are necessary for compatibility with MacOS
Big Sur. The fix is simply to update to a newer snapshot.
* [nix] Add a poetry manifest and use poetry to build the Python env
* [nix] Use niv to manage upstream sources like nixpkgs
* [nix] Update to newer nixpkgs snapshot
* [nix] Bump python package versions
The right-most top-most key on the Kinesis Advantage keyboard is labeled
“Progrm” and was meant to enter the Teensy bootloader as per the comment.
However, the keycode was set to KC_1, which just produces a “1”.
It should be RESET instead.
This commit fixes KC_1 to RESET in all files where the fix is needed.
The other files have already been fixed independently.
* Add IO Warning to WSL section of Getting Started
* FauxPark suggestion (thanks!)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* added adns5050 sensor code, as well as implementations for the Ploopy Mini and the Ploopy Nano
* fixed spurious scrolling issue
* recommended fixes for pr linting and cleanup
* Minor improvements to BM68RGB
* Add grave esc and LTO support
* Move comments to end of line
* Document the use of qmk script for compiling and flashing
* Revert arrow key flags back to mod
* Update keyboards/bm68rgb/bm68rgb.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update keyboards/bm68rgb/bm68rgb.c
Co-authored-by: Ryan <fauxpark@gmail.com>
* Remove grave escape
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update tab spacing
Co-authored-by: Ryan <fauxpark@gmail.com>
* Reverted make default
Co-authored-by: Ryan <fauxpark@gmail.com>
* Reverted make flash
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: filterpaper <filterpaper@localhost>
Co-authored-by: Ryan <fauxpark@gmail.com>
* update keyboards/helix/pico/keymaps/mtei/keymap.c
Stopped using the LAYOUT_kc macro. (this is response to #12160)
There is no change in the generated binary.
* small update pico/keymaps/mtei/keymap.c
This keymap for ANAVI Macro Pad 2 contains popular git commands
typed out and executed with a single key:
- left key: git commit -s
- right key: git push
Signed-off-by: Leon Anavi <leon@anavi.org>
* Add suspend wake functions for RGB Matrix
* Add suspension RGB functions to Planck/rev6 and Preonic/rev3
* Add suspend wake to Mark 65
* Revert changes to planck and preonic
* Remove changes to The Mark65
Co-authored-by: filterpaper <filterpaper@localhost>
* Improve upon the 'Caveats' section of the Layers and Mod-Tap documentation
* Update docs/mod_tap.md
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update docs/feature_layers.md
Co-authored-by: Ryan <fauxpark@gmail.com>
* Update docs/mod_tap.md
Co-authored-by: Ryan <fauxpark@gmail.com>
* Added a line saying that remote desktop problems may also be mitigated by defining TAP_CODE_DELAY
* Update docs/mod_tap.md
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Add a command to format json files
* change to work after rebase
* add test for qmk format-json
* add documentation for qmk format-json
* Update lib/python/qmk/cli/format/json.py
* initial rgb driver fix
* added underglow LEDs and fixed typo in RGB locations
* removed test code
* added my key maps
* updated rgb keymap to work with changes
* refactored my code to make it more maintainable and updated keymaps.
* added GPL licence
* Turned off matrix scan rate debug info
* added checks if RGB matrix is enabled to fix errors when building keymaps without RGB matrix enabled
* Apply suggestions from code review by fauxpark
Co-authored-by: Ryan <fauxpark@gmail.com>
* Renamed led driver file to be less ambiguous
* Renamed is31fl3733 driver files to is31fl3733-dual
Co-authored-by: Ryan <fauxpark@gmail.com>
* Fix USER_PRINT on avr/atsam
* Update tmk_core/common/arm_atsam/_print.h
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Format code according to conventions
* Update lib/python/qmk/cli/generate/api.py
* Update lib/python/qmk/cli/generate/api.py
Co-authored-by: QMK Bot <hello@qmk.fm>
Co-authored-by: Zach White <skullydazed@gmail.com>
* Add support for qmk_configurator style aliases
* add the keyboard aliases to the api data
* add support for a keyboard metadata file
* make flake8 happy
* [Keyboard] YMDK YM68
Converted from a KBFirmware JSON file provided via the vendor's product listing.
PCB supports Backlight on B6 and RGB Underglow on E2, but the LEDs are not pre-soldered according to the PCB photos.
* update VENDOR_ID and PRODUCT_ID
* added Vanana / Vaguette Lite / Waaffle
* changed extra GPIO allocations of Waaffle and Vanana
* Apply suggestions from code review
changed layout name of vaguette Lite / requested by drashna
* Apply suggestions from code review
Requested keymap changes have been made.
* all changes requested by collaborators are made
* RGB config updated / keymap updated
* fixed vaguette lite info.json
* fixed vaguette lite info.json
* fixed vaguette lite info.json
* Apply suggestions from code review
request changes are made
* pre rename h
* vaguettelite reanmed to lowercases
* fixed vanana keymap
* Apply suggestions from code review
* changed Bootmagic key of VaguetteLite as suggested
* Updated via keymap of Vaguette Lite as suggested
* add vaguette lite 6.25 layout
* added vaguette lite noclew keymap
* updated vaguette lite 6.25u keymap description
* updated vanana default keymap
* updated keymap spacing
* reabased from the official repo
* Update keymap.c
fixed vaguette lite keymap
* Apply suggestions from code review
All the requested changes by a collaborator were made.
* updated info.json of Vanana and readme files of Vanana and waffle
* rename LAYOUT_waaffle to LAYOUT_ortho_5x16
Also adjusts the info.json data to put a visual gap between the extension and main PCBs.
* make rules.mk and info.json specific to rev3
Removes nckiibs/waaffle as a build target, as it redirects to the only extant revision in the repository.
* add controller board build targets
Adds build targets for Pro Micro and Elite-C builds, with appropriate defaults for each.
Running `make nckiibs/waaffle/rev3` defaults to a Pro Micro-based build.
* fork rules.mk to be version-specific
* remove pimentoso/paddino02 as a keyboard target
This commit makes it so QMK API doesn't identify pimentoso/paddino02 as a build target on its own, because there's no actionable code here.
* add image to readme.md
* unify rules.mk files to QMK AVR template
- remove Bootloader selection comment block
- sort Build Option rules
- unify inline comments
Recent changes to QMK Configurator's API have made it so an info.json file is required for QMK Configurator to know how to render the keyboard in question.
This PR adds info.json files for keyboards that did not have them, with a few exceptions for boards whose layouts I was unable to determine.
* add info.json file for 2key2crawl
* add info.json file for 40percentclub/4x4
* add info.json file for 40percentclub/5x5
* add info.json file for 4pplet/aekiso60/rev_a
* add info.json file for 4pplet/steezy60/rev_a
* add info.json file for 6ball
* add info.json file for 7c8/framework
* add info.json file for aeboards/constellation
* add info.json file for alpine65
* add info.json file for aplyard/aplx6
* add info.json file for arch_36
* add info.json file for arisu
* add info.json file for box75
* add info.json file for butterstick
* add info.json file for four_banger
* add info.json file for geekboards/tester
* add info.json file for handwired/2x5keypad
* add info.json file for handwired/412_64
* add info.json file for handwired/42
* add info.json file for handwired/aplx2
* add info.json file for handwired/brain
* add info.json file for handwired/cans12er
* add info.json file for handwired/ck4x4
* add info.json file for handwired/d48
* add info.json file for handwired/dactyl_manuform/dmote/62key
* add info.json file for handwired/daishi
* add info.json file for handwired/hexon38
* add info.json file for handwired/jot50
* add info.json file for handwired/jotanck
* add info.json file for handwired/jotpad16
* add info.json file for handwired/k8split
* add info.json file for handwired/myskeeb
* add info.json file for handwired/nicekey
* add info.json file for handwired/onekey
* add info.json file for handwired/postageboard
* add info.json file for handwired/riblee_f401
* add info.json file for handwired/riblee_f411
* add info.json file for handwired/rs60
* add info.json file for handwired/splittest
* add info.json file for handwired/trackpoint
* add info.json file for handwired/traveller
* add info.json file for hhkb_lite_2
* add info.json file for honeycomb
* add info.json file for ivy/rev1
* add info.json file for keebio/viterbi
* add info.json file for laptreus
* add info.json file for latin47ble
* add info.json file for latin64ble
* add info.json file for launchpad/rev1
* add info.json file for lets_split_eh/eh
* add info.json file for mechmini/v1
* add info.json file for meira
* add info.json file for meishi
* add info.json file for merge/iso_macro
* add info.json file for mschwingen/modelm
* add info.json file for pabile/p20
* add info.json files for pimentoso/paddino02
rev1, rev2/left, and rev2/right
* add info.json file for rgbkb/pan
* add info.json files for runner3680
3x6, 3x7, 3x8, 4x6, 4x7, 4x8, 5x6, 5x7, and 5x8
* add info.json file for sck/gtm
* add info.json file for splitish
* add info.json file for standaside
* add info.json file for ungodly/launch_pad
* add info.json file for xelus/trinityxttkl
* Revert "add info.json file for rgbkb/pan"
This reverts commit 280b89bc61.
* correct maintainer for ivy/rev1
* Fix keycode mappings for via and ensure they don't change within protocol
* Update keycodes
* Fix broken keyboards
* added the missing keycodes found in via
* Remove invalid keycodes
Co-authored-by: David Hoelscher <infinityis@users.noreply.github.com>
* Convert to config
* Convert to config
* Convert to config
* Convert to config
* Convert to config
* Convert to config
* Convert to config
* Convert to config
* revert changes
The code was moved to the "ferris" directory.
Fixes the following commands:
```
qmk compile ~/qmk_firmware/keyboards/ferris/keymaps/default/keymap.json
qmk compile ~/qmk_firmware/keyboards/ferris/keymaps/pierrec83/keymap.json
```
Addresses this issue:
https://github.com/pierrechevalier83/ferris/issues/5
* add support for Bbm68rgb
* pull request changes filled
* pull request changes filled(this time for real)
* added new line to files that did not have new lines at end of file
* updated modifier keys for rgb effects
* Update keyboards/bm68rgb/readme.md
* Apply suggestions from code review
* Apply suggestions from code review
* add nkro suppport
* Update keyboards/bm68rgb/rules.mk
* modified keymap to better correspond to physical layout
* updated comment style
* Adding Files for Zodiark
* zodiark.h and keymap.c layout corrections
* Apply suggestions from code review
Applied all suggestions from zvecr.
Co-authored-by: Joel Challis <git@zvecr.com>
* Applied all suggestions from fauxpark
Co-authored-by: Ryan <fauxpark@gmail.com>
* Defined matrix driver
* Update keymap with GPL2
* Added GPL2+ to All keymap.c, cleaned up config.h, and removed the rgbmatrixwip keymap
* Apply suggestions from code review
Removed the two lines from the config.h and changed to the smaller resolution picture on the Readme.
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
* Added VIA keymap
* Corrected VIA Keymap oled.c
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
* Added boston keyboard
* Added Boston keyboard
* Changed some keycodes, added layers, added encoder layer change, added RGB layer indicator
* Cleaned up whitespace
* Update config.h
Cleaned up whitespace
* Cleaned up whitespace
* Added keyboard_post_init_kb code for RGBLEDs so that they start on a defined color
* Modified layout so that split backspace right is at a more intuitive location for configurator
* Cleaned up whitespace, changed some labels
* Modified keymap to accommodate revised layout in boston.h
* Removed "on port C6" from Line 20 (committed suggestion)
* Removed "Encoder Enable" from Line 8 (committed suggestion)
* Removed empty #define DESCRIPTION as suggested
* Implemented lock LED changes as suggested by drashna
* Implemented lock LED changes as suggested by Drashna, changed WS2812 driver byte order
* Updated HSV color codes to reflect WS2812 byte order change
* Implemented suggestion from noroadsleft
* Implemented suggestion from noroadsleft
* Updated readm.md per suggestions from noroadsleft
* Update keyboards/boston/readme.md per noroadsleft's suggestion
* Removed empty layers from default keymap
* Stripped empty layers and much code from default keymap ; moved to RGB Light Layers keycap
* Support for XO87 solderable version
* cleanup
* Remove abandoned code
* replaced KEYMAP with LAYOUT and moved LAYOUT macro to solderable.h. deleted unneeded files.
* Update keyboards/monstargear/xo87/solderable/keymaps/via/keymap.c
* update info.json with missing keys
* Apply suggestions from code review
* Apply suggestions from code review
correct layout macro
Keymap Minivan: configurable dual layout, many symbols, speed/text-size measuring
* Made center led color follow last activated layer color. Some led code clean up
* Reordered the _RAR layer, also putting GUI on the _ACC layer.
* Some issue with _FUN (see keymap.c FIXME), removed _FUN nested 'go to layer' key on _FUN.
* markdown formatting
* Update readme about _FUN top row issue (see keymap.c at XXX)
* Sentence order final bit was wrong by topic. White space fiddles.
* Minor comment editing
* minor comment adjustments
* leds are not modifiers, moved
* _FUN persistance on base layer only (XXX)
* The up/left to go to _LTR layer, now always goes to BASE (_LTR or _DDL).
Led indicators refldect this. No _DRA hold on base layer but _ACC. No
one shot to _FUN layer (seemed to make things confusing), but a TO().
* Some chatter about how to configure this map to your needs.
* language fixing
* Tried to make sense explaining how to access the descramble.
* language fix
* Seems there was a stale CSET_LTR/.*DDL, should be BASE_LTR/.*DDL, fixed.
* language, blabla
* Corrected stale _LTR into BASE
* Some documentation finetuning and trying to make it simple to understand
* language fixing
* language fixing
* Doing the utmost to explain it in a way I understand it too.
* language fixing, going ultra-verbose
* language fixing and formatting
* language fixing
* language fixing, formatting
* attempt to simplify explanations as much as possible
* added License to keymap.c (GPL), noted that _ACC and _DRA need work to
function in 'descramble' mode
* fixes regarding layer order, adding two layers, started on descramble
layers for _ACC and _DRA Unicode
* Noted some coming changes about F-layer and more descramble.
* changed globals to type 'bool'
* Changed F-layer by removing pre-modifier F keys, moved BASE direction
switches, added new incomplete descramble layers
* _FUN layer changes (comment fix)
* Led color fixes. Changed order of layers in the source (no user consequence).
* Added copyright authors (hope that is correct in GPL style/requirements).
* Switched on BASE layers the keys to activate _MOV with leftside _NSY:
more harmoneous, and _MOV can also be held by right hand.
* Follow Quantum indentation style more (mostly).
* On _NSY & _DDN, Tab follows _LTR. '-' moved to LShift, '.' moved, ','
created, shift(tab) removed.
* Added Linux Unicode input mode Accented characters on layers _DDA, _DDD
* added to Todo
* Added ijIJ to _ACC and _DDA layers (2nd last letter of Dutch alphabet).
* add todo point about navigation, fix -> "8th key"
* added 「」《》 to _DRA and _DDA
* Added 〇, ƒƑ. Altered Nav clusters with paging on outside, added thumb Page up/down to _MOV, brought _REV in line with recent _NSY changes (tab,-,enter,dot,comma). Harmonized tab on _Mov with other layer tabs (also a move command, moving cells).
* Added super- and sub-script for numbers on _DRA, _DDD.
* Added quotation marks „ “ ” to layers _DRA and _DDD.
* Added °〇•· to _DRA, _DDA
* § as an enumeration grouped with • (bullet), · as possibly math (middot or multiply) grouped with ±.
* Changed numbers to be on home-rows both hands, because thumb layer key does
not interfere alternating between hands for longer numbers (previous
reason for one-handed numbers). The unshifted symbols went left 2nd row,
because then the shifted versions can be accessed with shift if the
layout is replicated on a Pok3r (which is non-programmable right hand 2nd row.)
The logic has been harmonized with layers _DDN, _DRA & _DDD, _FUN, which
have number(-like) keys. It seems better this way. The symbols are layed
out more spaciously, each finger now does two symbols (2nd row, 4th
row). The numbers are more like they normally are, which feels more
natural, and should even the load between both hands and help with
alternating between hands when typing numbers.
Reason to change was looking into pressing ;, q, j, with ring-, middle-,
index-finger (moved one to the right from default Dvorak), because the
stagger makes it easier to reach that way, less loss of home row contact,
bending fingers more straight up and down. Downside became that left
index type 5 numbers, and that the normal finger matching (0 is pinky,
etc) was lost. With the new layout these potential problems are also resolved.
* Made descramble _DDN, _DDL representation show both raw and resulting layouts.
layouts.
* Added arrows, fleur and heart on _DRA and _DDD.
* Changed _FUN layer switching to incorporate the 'descramble' system
seemlessly. The 4 layer with a descramble twin will switch to either
depending on the descramble mode.
* Descramble mode with normal Unicode layers mostly done, except costum LT() to share the key with Delete/Alt on _DDL.
* Changed descramble mode keys to be just one on a cycle. Added full set
of Alt/Control/Shift multimodifiers to `_FUN` layer.
* Changed descramble mode keys to be just one on a cycle. Added full set
of Alt/Control/Shift multimodifiers to `_FUN` layer.
* format fix
* Descramble cycle key moved from row 1 to row 4 far right, to avoid
accidental press,
* The 'descramble' mode with normal Unicode encoding finished. Fixed
mistaken non-transparent key on _DRA and _DDD, removed tab from _RAR.
* stale layer comment fix _LTR/_DDL
* New layer-tap timed keys proved unreliable, longer tap term fixed it.
* The _FUN layer is a one-shot layer for the F-keys, but that can be toggled by the FUN< key on the _FUN layer (top row, 3rd).
Some additions to the readme.
* Comment improvements (layout tables)
* minor
* Made #defines to allow a user to easily switch to a WASD arrow layout.
* Added keys to switch leds on/off, to _RAR layer. Fixed wrong comment on 'APP' key in _RAR.
* comments fix regarding MLed, SLeds
* Added BASE to same key as _FUN on base layer, except layers with numbers/symbols.
Removed capital ƒ, and moved ± to that key. Added … on old spot of ±.
Some readme language editing, adding something about other keyboards, etc.
* small language fix
* Config.h: Removed unused #defines.
Readme: minor edits.
* minor language edits.
* Minor comment edit.
* Minor language fix.
* Minor language style edit.
* Removed unnecessary section 'personal remarks'
* Changed the top row in _DRA and _DDD. Super-/sub-script parenthesis to that location on _NSY, added currency symbols, reduced emoticons.
* minor formatting
* Added LGUI and RGUI on the _DRA/_DDD layer(s).
* Put RGUI on the base layer, on the _FUN layer switch key. This probably causes side-effects on
systems without where RGUI is not merely a modifier.
* Changed _FUN toggle on BASE to Rshift, because RGUI on some systems has a consequence when tapped by itself.
* Changed LGUI and RGUI around because LGUI is mostly used and on BASE layer. Some edits to last part of readme.md.
* Minor language fixed (L/R-GUI, use-case).
* some more blabla on use case of the map generally
* Changed name KC__[LR]GUI to KC__[XY]GUI for clarity wrt switching them.
* Removed left-arrow on Alt on _ACC and _DRA, for faster use with pointer device.
* Added the same system as is on RShift, to LShift, pointed it to _MOV layer.
* Changed left shift layer toggle to _DRA, because it has uncluttered shift, alt, control, for using those with a pointer device (mouse, stylus).
* Changed base layer left-shift tap from _DRA to _MOV, because _MOV toggled can be convenient generally, and it is a less dangerous layer to accidentally press, and it makes more sense to activate the navigation layer when editing in 3D software.
* The Power keys on _RAR now require Shift to be activated (accident prevention).
* fiddled with title
* more title fiddles
* Added RGUI on _FUN for future proofing the layout, harmonizing layers.
* Added ',' on _REV (number fraction division). Minor fix to documentation format.
* title fiddle
* Added LGUI, RGUI to _RAR, to harmonize with other layers and for potential future uses.
* Changed unnecessary transparent keycode on _AcC and _DDA to be 'nop', minor comment fixes.
* Added on _DRA and _DDD: ─━┄┅.
Fixed a bug in led layer colors (forgotten 'else', causing wrong color for _DDD).
* Some changes to conform to QMK readme.md standards (more necessary).
* Changed _REV into a numbers pad layer called _PAD, put on Lshift in BASE.
_REV layer (not used anyway) replaced with a layer that is basically
a layer where symbols that exist on _NSY (mostly) and on _LTR (few)
are existing in the same locations, but in the number pad variant of
that symbol. The goal is to make it easy to find, it is not meant for
single hand access quickly. The use is to deal with special shortcuts
like Blender has, which differentiate normal and numpad numbers/symbols.
For quick access it was put on the left shift in BASE layer.
* Added navigation arrangements to _PAD. Changed location of shift on _RAR.
The numbers on numpad are easy to find, but when these keys are in their
navigation variant with numlock on it becomes almost impossible. There
was room on the map to add an arrow row, and a row for the remaining
navigation keys, hence they where added. They are in a left handed
order, because there already is a right handed order on _MOV.
It still proved possible to accidentally trigger Power, due to erroneous
hitting 'shift' in BASE and then messing around by accident. With shift
on (BASE) space in _RAR, accidents should be reduced further, since it
is a combination never used.
* Added Tab on _ACC and _PAD
To facilitate Control-Tab (a blender shortcut). On _ACC the Tab is in its
correct place. On _PAD it messy because not on its correct place. Leaving
it there for now: easier to access Tab+Control with left hand only on the
modifiers in _PAD, and other hand on a pointer device. Tab has a potential
use to jump input cells, which may be used in combination with a numpad.
* _MOV layer: switched default layout to trangle navigation layout.
This only required to set the already existing #defines. I found
the flat layout not intuitive, the triangle layout has no left/rigth hand problem.
The higher buttons for the mouse where not correctly ordered, so they where re-ordered.
* Triangle navigation by default. Added pictures of layout to readme.md
* Layer names on images.
* Changed image for layer _DRAW slightly.
The shifted symbol to the lower right.
* Image for _PAD corrected for no-action and Tab.
* Added a paragraph about why this layout is good to use.
* removed 'modifiers' paragraph
* Some text improvements in paragraph on what is good about this layout.
Fiddle on the title as well.
* Added Del on _DRAW layer.
Some minor text fiddles here and there.
* Removed word "descramble" in image layer _RAR.
* Improved key 'sticky' and altered image size (test).
* Rescaled image for layer FUN
* Unicode in its own file. Bug fix: _DDA 'ï' printed a capital.
Upon a suggestion from QMK Discord #programming, the macros and
unicode is put in a separate file, because keymap.c got large.
An erroneous numerical value for ï was fixed.
Author e-mail is updated to a new e-mail adres.
* Added an image to illustrate 'descramble' mode.
* Changed explicit e-mail to link, to reduce spam bot trolling.
* Added a Qwerty+Dvorak compile time version.
It seemed the overall design (accented, Unicode, stuff) could be useful
for Qwerty typers (of which there are so many). This was done by #if(n)def
out/in a fair amount of code here and there, and creating 4 replacement
layers in a new file qwerty_dvorak.c, also with its own readme in
qwerty_dvorak.md. The 'descramble' switch system is re-used here to
switch from Qwerty to Dvorak.
The new code is put in qwerty_dvorak.c, which starts with an extensive
comment about why and how it works.
Fix: Docs, a stale "_MOV" was replaced with "_PAD" in the readme.md for _DDL.
* Changed image hosting.
Downtime, problems registering: resorting to my own domain.
* minor text order changes
* Some text improvements.
* Added a compile option to easily change what layer is active on startup.
This layer can be plain Dvorak or 'descrambled' Dvorak, if
QWERTY_DVORAK is not set. It can be Qwerty or Dvorak if it is set.
Just some simple #define statements.
* Added graphics for Qwerty+Dvorak, and improved documentation.
Added the whole set of layers also to qwerty_dvorak.md, because
it seemed it would get even more confusing to have a user cross
reference it between the two files.
* Some simple text improvements
* Numbers/symbols layer keys on BASE to DRAW when both pressed.
The two keys besides the space bars go to DRAW layer when pressed
simultaneously. (This is inspired on the Planck's 'adjust' layer,
pressing both 'lower' and 'raise' together.) All layers can now
(relatively) comfortably be reached. This change was necessary
because it was cumbersome to reach the DRAW layer with the right
pinky and then type with the right hand. _RAR is now not super
easy, but it is a 'rare' layer anyway.
* Added compile + flash section in readme.
* Corrected documentation: 'mouse on ... hand'
* Removed up/down arrow ⮙⮛ on _DRA and _DDD, because the hex file was too large.
Due to pulling the master repository, changing nothing in this keymap, the
code compiled as 2 bytes too large, where before it had been 2 bytes left free.
Some compile options have been created, to make it easy to cut out up/down
arrow on the 'descramble' _DDD layer, and/or the normal _DRA layer, and/or
dashes ┄┅ on the 'descramble' _DDD layer. The 'normal' layer cut out of arrows
yields little benefit, but it keeps all layers exactly the same between 'descramble'
and normal mode. For Qwerty compilation, you will want to not cut out anything,
requiring to edit the user compile options in keymap.c (top).
* Resolved size issue with QMK #defines, re-instated ⮙⮛, removed RGUI on _FUN.
Various #defines tested to reduce space, NO_ACTION_MACRO NO_ACTION_FUNCTION
worked. Therefore the cutting out of the up/down arrows was no longer
needed. The #defines to easily remove them have been left in place.
RGUI made _FUN confusing with the multi-modifiers, thus taken out. Multi-
modifiers now logically cascade without skipping a key.
* Improved image files with led colors and some tweaks.
* Updated graphics file for Dvorak in QWERTY_DVORAK compile option.
The led colors where not correct because the graphics for standard
Dvorak was being re-used.
* Fixed for re-instating arrow up/down for space.
* Activation marker on _FUN layer in documentation altered.
It looked like it was a symbol.
* Made startup layer explicit in code.
Startup layer follows 'descramble' on/off user #define setting.
* Marker for BASE activation for _PAD, _MOV: fixed.
There was a stale marker in the documentation layouts for _MOV: removed.
The same marker for _PAD was improved.
* Code optimizations suggested on pull request #8066https://github.com/qmk/qmk_firmware/pull/8066
Some things moved to config.h, rules.mk
Changed layer_on/_off to layer_move(..)
Removed a global variable, changed literal type on a function.
Code is now a lot smaller, hence removed readme.md entry on that.
Removed "not shown" on 'descramble' leds in qwerty readme (mistake).
* Compile option to change ƒ into €.
Since it's a west european keymap, maybe someone likes the euro currency on it.
(It was not on it because I don't like ...)
* default to ƒ on keymap
* Removed print sheet for layout *.odt file.
Changing this to text/markdown seems to reduce the use of this file
to a point that it may be better to delete it. There is also the
graphics now, which might be better to print.
* Updated the seller/maintainer of the board to: The Key Dot Company LLC.
https://thekey.company/blogs/blog-updates/thekey-company-acquires-minivan
* Changed external links to website to plain text.
The markdown link is caught by the github cammo system.
* Last free spot on the map made easy to configure.
One spot was still free (Unicode _DRA/_DDD layer). This puts a #define
on top of unicode_macros.c, to make it easy for a user to put in their
own symbol.
Put placeholder 🛠 in there. That symbol is not represented in the
documentation (maybe it should, it is a nice symbol).
* Removed space saving #defines.
These became obsolete clutter, now that there is enough space thanks to
LINK_TIME_OPTIMIZATION_ENABLE.
* Added tokens to simplify compiling for 45/46 keys.
An attempt to make it easy to switch on a #define between
various hardware configurations (44, 45, 46 keys) failed.
This: #define J1 , KC_A // seems to have failed to be
recognized as a key definition.
error: error: macro "LAYOUT_command" requires 45 arguments, but only 44 given
Left in are some code tokens (J1-J4) and #defines that need
at least bulk replacement in keymap.c and optionally qwerty_dvorak.c,
to compile for such hardware configurations. It would be nice
if this could be done better.
* User can easily compile for 45, 46 hardware keys.
Added some #ifdefs around optional keys in the keymap, to allow
compiling for 45 and 46 keys. Left the earlier made code with the
J1_J2 etc. tokens, which could still be used to port the map to
a board with even more keys. This fixes earlier mentioned problem.
* Arrow cluster for 'arrow' hardware configuration.
This is a user configurations option in the keymap.c, to have
an arrow cluster around the additional key for 'arrow' hardware.
The arrow cluster is however not on the base layer (no room). The
additional key is used to switch to the _MOV layer. There it becomes
a down arrow in the arrow cluster.
To make this work with the default _MOV layer, the right hand
keys on the 2nd row where moved one spot to the left, for the 'triangle'
arrow configuration (mouse right). This is a trivial change.
There was a bunch of language improvements to the documentation,
including graphics.
The symbol 🛠 is now listed.
The program seems to be reliable, as far as used and tested.
* Correction of mark-down formatting.
_MOV layer 'arrow' cluster documentation rendered incorrectly
(attempt to add newline).
* Markdown formatting mistake correction.
Adding a newline at 'Layers (text)' chapter.
* Moving the graphics about 'arrow' to topic.
The graphic explaining what 'arrow' with arrow cluster means,
should be where that is mentioned under compile options.
* Editor token J3_J4 moved to avoid arrow cluster.
If one wants to insert a key by bulk replacing J3_J4, and has
activated the 'arrow' layout arrow cluster, this new key would
be inside the arrow cluster, hence it was moved to the left.
* Æstethics of image 'arrow' layout, arrow cluster.
Shading corrected/nicer.
* Corrected image link in readme.md
Illustration 'arrow' layout, arrow cluster.
* Fix: Toggle to BASE layer leaked. South-paw key.
When toggling to a non-BASE layer, either on the _FUN layer or
using the 'arrow' cluster for 'arrow' layout, on the BASE layer to
toggle to _MOV, the layer changed on the down-stroke, causing a
character to leak. These layer switch macros now alter layer on the
up stroke.
There seems to have been an accidental code deletion: #define MORE_key1.
This defines what the additional hardware key for 'South Paw' ('Command')
should be.
* User compile option comments easier to read.
The phrases "uncomment" and "comment out" are confusing.
Replaced by _activate_ and _remove_.
* Put user compile options back to default Minivan.
Accidentally left the compile options for number of Minivan keys
in the wrong state while git pushing.
* Rewording a comment in the user compile options.
Clearer language.
* Leds indicate Caps/Num-lock.
Leds green/blue switch depending on numlock for numbers-pad layer _PAD.
BASE layer led brightens when capslock is on.
* _PAD had the wrong period, fixed.
_PAD layer had the KC_DOT instead of KC_KP_DOT.
* Options for navigation keys arrow hardware key.
Compile options added to have a complete navigation cluster around
the additional hardware key for 'arrow' layout, both for triangle
left handed arrows and flat right handed arrows.
* Added _FUN layer in text Qwerty.
_FUN text layer was by mistake missing/deleted in the qwerty-dvorak readme.
* Added graphical visualization of all layers.
* Graphics: _RAR 'Capslock', _NSY '~' corrected.
Text representation of layers was correct, graphics corrected.
* Compile Option arrows in a vi(1) editor layout.
Vi(1) is a much loved editor, with its own peculiar arrow layout
on HJKL (as it appears in Qwerty). It seems possible some Qwerty
vi users might find it fun this way for regular arrows as well.
The 'arrow' hardware layout, compiled with arrow cluster, follows
the vi(1) arrow arrangement.
* More layer overview graphics files for the readmes.
Added a '40% x 400%' to the 3D layer overview image (top).
Added overview of all layers in a readable way (Dvorak² only).
Added a guide to show where what is similar on layers. This should help with learning.
Added a graphic showing what key activates what layer.
Added graphics that show what layer subsets are active in certain modes (Dvorak² and Qwerty/Dvorak).
Fixed mistake: _Tab_ missing in layer `_PAD` graphics file.
* 'Tab' inserted in overview graphics for _PAD layer.
* Corrected mistake in similar layer keys.
LGUI on _ACC
* Added overview graphics for Qwerty/Dvorak.
Overview of layers, similar keys on similar layers, activation.
* Compile option to change ⮘ ⮙ ⮚ ⮛ into ☐ ☒ ☑ 🗹
Layer _DRA, _DDD. Checkboxes seem handy for lists. Set default on in
keymap.c. Pointers seem rarely useful. Right arrow sometimes as a bullet
point marker. All affected graphics updated.
* First overview image correction.
Last layer is not 'symbols' due to its numbers.
Some art improvement.
* Minor tekst correction (author Minivan config).
* Short features overview and git lib fix.
* note⁴ as example
* Improvements all over the place.
The keymap is now modular dual layout. There is a common system,
and there can then be two letter/numbers layer pairs be compiled
with it, which are separately defined and documented in ./bases…
files.
Speed measuring and text size counting added.
There is an additional Unicode layer, for a total of three.
The “descramble Dvorak” layer is now just a function, as was
originally intended.
* Wrong link to Dvorak manual, stray ‛r’ character.
* Splitting the layouts so they are not pairs of 4.
The layers had been configurable only as a set of a BASE and letter
layer with another BASE and letter layer: Dvorak + Dvorak² and
Qwerty+Dvorak.
Now Dvorak, Dvorak² and Qwerty can be individually configured, to
be on either the Default or Alternate spots in the dual layout
(Dvorak² only supports Alternate, due to its “_HALF_ descramble” mode).
* Added Colemak layout.
Some tidying up of documentation wrt DEF/ALT base layer identifiers.
Fixed missing ‛:’ on the graphics for Qwerty.
* stale letter
* fix modified submodules
* removed redundant code
testing twice for non-zero
* Speed measuring precision fix.
The calculation of “int speed;” caused great loss of precision.
* Added overview of layers by key.
Makes it easier to see the associations of meanings per key.
* Dvorak descramble by key overview
Forgot to add.
* Minor readme format fiddle.
* Graphics: blank keys are grey, fix one mistake.
* Compilation as a single layout.
Layer definitions _ALT_BASE and _ALT_NSY (enum) are simply #redefined
as preprocessor numbers equal to _DEF_BASE and _DEF_NSY (see user_config.h,
lowest reference to MINIFAN_SINGLE_LAYOUT).
* Single layout compile option
See user_config.h lowest reference to MINIFAN_SINGLE_LAYOUT for the why of the how.
* RShift toggles to _RAR when held ≥ 500 ms.
“Qwerty with arrows on BASE”, will need a key to _RAR layer.
It mirrors the behavior of LShift. It is generally useful.
Removed useless user options regarding LShift layer toggle.
It will have to be _PAD.
* Layer switch graphic update per last push.
Forgot to update the default base layer switching graphic.
* Preconfigured optional ‛Command’ hold key to _RAR layer.
This is a third way to reach the _RAR layer, useful if the furthest
right key on row 1 is changed to an uncluttered BASE layer arrow.
This further prepares the way for a Qwerty layout with arrows on BASE.
* Changed ‛Command’ hardware key to TG(_RAR)
MO(_RAR) doesn't work, because it doesn't follow a change in base
layers, which happens on _RAR.
* Corrected wrong all-layers-by-key upload readme.md
* More graphics = more fun: keycap view in readme.
Preparing to integrate a number pad base layer.
Shortened hold time for right/left Shift layer toggles to 200 ms.
* Too light grey for “1470” on three layout graphics.
* Added a numbers pad Base layout option.
This numbers pad layer is in the format of a numbers pad keyboard/cluster.
It has a second layer, which is normal for all Base layers. In this case,
the second layer provides sub-/super-script versions of the numbers, in the
same layout.
* Keycap view numpad improvements.
* Graphics: forgot to cut off southpaw/arrow on two keycap views.
* Preprocessor identifier for “MIT” Planck spacebar.
Trans-minivan preprocessor statements augmented with an identifier
which might work for a Planck keyboard with two unit spacebar.
At this point, the “trans minivan” code only could make porting
to other keyboards less of a chore. It remains untested. Only
visual inspection of the preprocessing regarding the amount of
keys in the layout has been done.
* Tweak of common layout graphic impression.
This would also allow indication of a number pad.
* Improved dual numpad layer & graphics.
All numbers/symbols seem to get affected by NumLock, hence they
all needed to show that in the graphic documentation. Tab was
removed in favor of Numpad ‛=’, and comma replaced by numpad-comma.
* Committing partial job on numpad Base layers.
Hardware problem here, don't want to loose the data.
* Three issues: header file, numpad Base, Tab key.
This should complete previous unexpected commit.
① Documentation and precedent for a base layer with its own header file,
base_NAME.h. This allows someone writing a new Base layer pair, to
(un)set user configuration options in user_config.h.
② Numbers pad Base layer added, different variants.
The common numbers pad also has a new optional layout (square), and can be
removed by user configuration option (because one might already compile with
the Base layer numbers pad)..
③ It turns out there was an easy solution to the Tab key anomaly.
Uncluttered Tab is now located both on BON and ACC layers, on intuitive
locations opposing Control, which is also in the right spot. Basic
modifiers for Tab works well now.
* Graphics for Base numpad single square: correction.
Showed wrong insertion key for 'command' / 'south paw' hardware key.
…
* ‛South paw’ default GUI. Graphics. TOC user config.
Made ‛south paw’ be GUI by default.
Improved graphics appearance.
Ordered options in user_config.h, added table of contents.
* User config cleanup & added a compact alternate.
The normal user configuration, which is heavily documented and
therefore a bit unwieldy, can now optionally be done in another
file, without any documentation.
* Base graphics fix, _ACC/_NSY hold switch option
* Added a Qwerty with arrows on base.
Added a graphic in readme for Dvorak descramble (for documentation predictability).
* Put `~ on the _BON layer.
① There was no uncluttered `~ available. On Qwerty Base Arrow
the `~ key got even more sidelined.
② Improved Qwerty Base Arrow manual.
* Option to harmonize Qwerty with Qwerty Base Arrow
Key ‛/?’ is different on Qwerty Base Arrow, which will lead
to typing arrows for people who have both kinds of Qwerty
running. This option adds this key in the same spot as where
it is on Qwerty Base Arrow, but only if Qwerty Base Arrow is
being compiled.
* See previous commit (Qwerty harmonization)
* Efficiency fix. +Workman layout.
Workman layout added.
Serious efficiency mistakes discovered and fixed:
① There was no check on Delete on Base layer, to see if another
key had been pressed. Fixed.
② The Shifts on Base did not provide a Shift for the _BON layer
accented characters. Fixed.
Fixing was painless, proving the code is stable and maintainable.
* Changed Tab/CTL on _ACC/_DRA, μ, T.O.C. readme.md
μ was forgotten (French), added on _ACC.
This caused Tab to get displaced and stacked with Control, which
ends up being better anyway. This also meant _ACC needed Left-Control,
and therefore _DRA needed to switch Tab and Control, because it needs
to complement _ACC with Right-Control (to be able to type all modifiers
with Tab).
➡ Overview graphics are not yet updated. _DRA and _ACC are now out of sync
in the graphics documentation. To be fixed soon.
Chapter on language support added in readme.
Table of Contents added to readme.
* Updated all graphics (_BON/_DRA Tab/Control/μ).
Some fiddles with readme.
* Led on/off at startup, RAlt on Base option.
It is hard to believe, but the todo que seems empty!
* Minor changes in readme.
* Minor documentation improvement (RAlt/_RAR).
* Minor changes readme.
Removed “not tested yet …”, because that becomes wrong once it is tested.
* Added a blank keycaps graphic.
* Lower saturation letters Dvorak-descramble keycap.
;-]
* One key change in personal keycap graphic.
;-]
* Forgot _NSY layer in keycap qwerty basearrow
* Moved speed/count startup setting in user_config.h
Moved to chapter startup settings.
(These last commits are more like some loose ends with the last
ongoing topics. It isn't active development, nothing new gets
started. If QMK requests more changes, even if it is a typo,
just let me know.)
* Travis Cl: “The LINK_TIME_OPTIMIZATION_ENABLE flag…
… has been renamed to LTO_ENABLE.. Stop.”
Changed it.
* Adds a link to external resources in readme.
A place to put gimp .xcf files if someone wants to
modify/port the keymap. Perhaps links to varieties
of Minifan on github. Maybe a video about the keymap,
and such. Stuff that doesn't belong/fit on github,
and is easy to update without pull requests.
* RGBLIGHT_ENABLE rules.mk fixed, leds off for nop
rules.mk RGBLIGHT_ENABLE can now be set to “no” without issue.
Compile option to have leds off in Default Base layer.
* Transparency bug fixed.
Default layer was not set. This remained a hidden mistake, until Qwerty
Base Arrow had a different layer hold key in one place.
* Graphics doc correction, L/Rshift toggle config
Qwerty Base Arrow fix: Keycap view showed unneeded and empty ‛South Paw’ key.
All layers by key shows 45 Minivan version, title said “44”.
Added user configuration options to alter what is on the short and long
toggle on Left and Right Shift.
* Improved “why this layout” in readme.
Wanted to add that numbers & symbols layer can be reached by both
thumbs. It seems quite a drawback if that is not possible, to
constantly need to hold down the same thumb, especially for programming ?
It seemed worthwhile to mention.
* Reduced size of readme, dvorak-descramble, todo.
Stuff got a bit out of hand.
* one letter typo
* renumbered readme, _fun_stay initialization
Renumbered readme chapters to start from 1 not 0. Other minor edits.
Sticky on/off for _FUN layer seemed to be unpredictable on startup.
* Letter Ñ (capital) fix.
I seem to remember messing with this recently,
must have damaged this letter :-(. Capital was missing.
* Bare bones base numpad all layer by key.
I seemed to have forgotten to hide the common layers for this version.
Which doesn't matter a whole lot but this is a bit better and as it was meant.
* Fix triggering of adjust layer in default lily58 keymap
* Remove unused extern
* Swap raise/lower in update_tri_layer_state call to match recommendation in PR checklist
* Modified tmk_core/rules.mk to avoid linking errors
Added -fcommon flag to avoid linking errors due to multiple variable definitions. Though this is neither a definitive nor good solution, proper changes and use of extern keyword to avoid those multiple definitions must be made
* Comment updated
* [Keyboard] spiderisland/split78: add MCP23018 reset code
Now, communication with the right side gets re-established
after unplugging it and plugging it back in.
* [Keyboard] spiderisland/split78: configure debouncing
I've been experiencing particularly bad bounce on the 'A' key.
Also, update maintainer github username
* concatenate config.h to 64key directory
* move rules.mk to 64key directory
This commit makes the firmware actually compile.
* insert complete rules.mk contents
Conforms the file to QMK's template.
* move info.json to 64key directory
* remove concertina.h
This file no longer serves a purpose now that everything is in the 64key directory.
* complete 64key readme.md
Conforms the file more to QMK's template.
* VEA Support
* Update LEDs to use QMK methods
* Enable Backlight
* Update Vendor ID
* Updates to enable split RGB
* Update readme
* Update to split RGB
* remove unnecessary reference
* Knight animation starts at the back
* remove hardcoded variable
Co-authored-by: Major Koos <MajorKoos@noreply.users.github.com>
* [Keyboard] Add 'LAYOUT_65_ansi_split_bs' support to KBDfans KBD67 rev2
This is already supported by VIA.
* [Keymap] Fix kbd67 catrielmuller_camilad keymap
* [Keyboard] Add my keymap for KBDfans KBD67 rev2 using 'LAYOUT_65_ansi_split_bs'
* Create Alter folder
* Revert "Create Alter folder"
This reverts commit 361103b821.
* Added n60_s folder
* Fixed the url of the image in the readme
* Updated readme
* Updated readme
* Updated readme
* Added new section to docs: Checking Modifier State
* Added id anchors to all headers in modifiers docs
* Added a Wikipedia link to bitwise operators and...
crosslinked to the QMK macro docs.
* Added an explanation on the format of mod bitmask
* Added .md extension to hyperlinks to macros docs
* Corrected mod mask order and changed notation
* Documented add_oneshot_mods and del_oneshot_mods
* Mentioned modifier checks in the macro docs
* Explained strict modifier checking
i.e. using `get_mods() & MOD_MASK == MOD_MASK` instead of simply
`get_mods() & MOD_MASK`
* Added (un)register_mods to the docs
* Put left term of comparison in parens
* initial rgb driver fix
* added underglow LEDs and fixed typo in RGB locations
* removed test code
* added my key maps
* updated rgb keymap to work with changes
* refactored my code to make it more maintainable and updated keymaps.
* added GPL licence
* add podman support to docker_build.sh script
* break out runtime into the RUNTIME variable
* allows RUNTIME to be set by the user
* decides on docker or podman if docker isn't avaible
* rewrote check for docker-machine to account only for docker runtime
* put --user arg into a variable only to be used with docker
this is not needed with podman as podman maps the containers root id
to the users id.
* add podman to getting_started_docker documentation
* Add suggestion for indirect unicode input on Linux
I have used this approach myself with great success, and it seems to be the only good solution that doesn't involve IBus.
* Elaborate on keyboard layout on Linux
This should be enough to allow people to figure out how to add custom characters to a Linux keyboard layout.
### RGB Matrix support for split common ([#11055](https://github.com/qmk/qmk_firmware/pull/11055)) :id=rgb-matrix-split-common
Split boards can now use RGB Matrix without defining a custom matrix.
### Teensy 3.6 support ([#12258](https://github.com/qmk/qmk_firmware/pull/12258)) :id=teensy-3-6-support
Added support for MK66F18 (Teensy 3.6) microcontroller.
### New command: qmk console ([#12828](https://github.com/qmk/qmk_firmware/pull/12828)) :id=new-command-qmk-console
A new `qmk console` command has been added for attaching to your keyboard's console. It operates similiarly to QMK Toolbox by allowing you to connect to one or more keyboard consoles to display debugging messages.
We've updated the `qmk config` command to show only the configuration items you have actually set. You can now display (almost) all of the available configuration options, along with their default values, using `qmk config -a`.
The [Function96 V2](https://github.com/qmk/qmk_firmware/tree/0.13.0/keyboards/function96/v2) has also been added as part of these changes.
The codebase for the [Durgod K320](https://github.com/qmk/qmk_firmware/tree/0.13.0/keyboards/durgod/k320) has been reworked in anticipation of additional Durgod keyboards gaining QMK support.
Additionally, the `crkbd/rev1/legacy` keyboard has been removed.
### Bootmagic Deprecation and Refactor ([#12172](https://github.com/qmk/qmk_firmware/pull/12172)) :id=bootmagic-deprecation-and-refactor
QMK has decided to deprecate the full Bootmagic feature and leave Bootmagic Lite as the only remaining option.
This pull request changes the behavior of `BOOTMAGIC_ENABLE` such that specifying `BOOTMAGIC_ENABLE = yes` enables Bootmagic Lite instead of full Bootmagic.
If attempts to use Bootmagic functionality result in unexpected behavior, check your `rules.mk` file and change the `BOOTMAGIC_ENABLE` setting to specify either `lite` or `full`.
#### Tentative Deprecation Schedule
This is the current planned roadmap for the behavior of `BOOTMAGIC_ENABLE`:
- From 2021 May 29, setting `BOOTMAGIC_ENABLE = yes` will enable Bootmagic Lite instead of full Bootmagic.
- From 2021 Aug 28, `BOOTMAGIC_ENABLE` must be either `yes`, `lite`, or `no`– setting `BOOTMAGIC_ENABLE = full` will cause compilation to fail.
- From 2021 Nov 27, `BOOTMAGIC_ENABLE` must be either `yes` or `no`– setting `BOOTMAGIC_ENABLE = lite` will cause compilation to fail.
### Removal of LAYOUT_kc ([#12160](https://github.com/qmk/qmk_firmware/pull/12160)) :id=removal-of-layout-kc
We've removed support for `LAYOUT_kc` macros, if your keymap uses one you will need to update it use a regular `LAYOUT` macro.
### Encoder callbacks are now boolean ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985)) :id=encoder-callback-boolean
To allow for keyboards to override (or not) keymap level code the `encoder_update_kb` function has been changed from `void` to `bool`. You will need to update your function definition to reflect this and ensure that you return a `true` or `false` value.
* Fix connection issue in split keyboards when slave and OLED display are connected via I2C (fixes #9335) ([#11487](https://github.com/qmk/qmk_firmware/pull/11487))
* Terrazzo: Fix wrong LED Matrix function names ([#12561](https://github.com/qmk/qmk_firmware/pull/12561))
* Apply the "NO_LIMITED_CONTROLLER_CONNECT" fix to atmega16u2 ([#12482](https://github.com/qmk/qmk_firmware/pull/12482))
* Enhancement of WPM feature ([#11727](https://github.com/qmk/qmk_firmware/pull/11727))
* Add Per Key functionality for AutoShift ([#11536](https://github.com/qmk/qmk_firmware/pull/11536))
* LED Matrix: Reactive effect buffers & advanced indicators ([#12588](https://github.com/qmk/qmk_firmware/pull/12588))
* LED Matrix: support for Split keyboards ([#12633](https://github.com/qmk/qmk_firmware/pull/12633))
* add setting to enable infinite timeout for leader key ([#6580](https://github.com/qmk/qmk_firmware/pull/6580), [#12721](https://github.com/qmk/qmk_firmware/pull/12721 "Fix bad PR merge for #6580"))
* Update ADC driver for STM32F1xx, STM32F3xx, STM32F4xx ([#12403](https://github.com/qmk/qmk_firmware/pull/12403))
* Add initial support for tinyuf2 bootloader (when hosted on F411 blackpill) ([#12600](https://github.com/qmk/qmk_firmware/pull/12600))
* Add support for STM32F446 MCU ([#12619](https://github.com/qmk/qmk_firmware/pull/12619))
* Add STM32L433 and L443 support ([#12063](https://github.com/qmk/qmk_firmware/pull/12063))
* Added OLED fade out support ([#12086](https://github.com/qmk/qmk_firmware/pull/12086))
* New command: `qmk console` ([#12828](https://github.com/qmk/qmk_firmware/pull/12828))
* LED Matrix: Effects! ([#12651](https://github.com/qmk/qmk_firmware/pull/12651))
* Add setup, clone, and env to the list of commands we allow even with broken modules ([#12868](https://github.com/qmk/qmk_firmware/pull/12868))
* LED Matrix: Documentation ([#12685](https://github.com/qmk/qmk_firmware/pull/12685))
* Add function to allow repeated blinking of one layer ([#12237](https://github.com/qmk/qmk_firmware/pull/12237))
* Add support for up to 4 IS31FL3733 drivers ([#12342](https://github.com/qmk/qmk_firmware/pull/12342))
* Convert Encoder callbacks to be boolean functions ([#12805](https://github.com/qmk/qmk_firmware/pull/12805), [#12985](https://github.com/qmk/qmk_firmware/pull/12985))
* [Keymap] Update to Drashna keymap and user code (based on develop) ([#12936](https://github.com/qmk/qmk_firmware/pull/12936))
* Add Full-duplex serial driver for ARM boards ([#9842](https://github.com/qmk/qmk_firmware/pull/9842))
* Backlight: add defines for default level and breathing state ([#12560](https://github.com/qmk/qmk_firmware/pull/12560), [#13024](https://github.com/qmk/qmk_firmware/pull/13024))
* Add dire message about LUFA mass storage bootloader ([#13014](https://github.com/qmk/qmk_firmware/pull/13014))
### Clean-ups and Optimizations :id=core-optimizations
* Overhaul bootmagic logic to have single entrypoint ([#8532](https://github.com/qmk/qmk_firmware/pull/8532))
* Refactor of USB code within split_common ([#11890](https://github.com/qmk/qmk_firmware/pull/11890))
* Begin the process of deprecating `bin/qmk` in favor of the global CLI ([#12109](https://github.com/qmk/qmk_firmware/pull/12109))
* LED Matrix: decouple from Backlight ([#12054](https://github.com/qmk/qmk_firmware/pull/12054))
* Move gpio wait logic to wait.h ([#12067](https://github.com/qmk/qmk_firmware/pull/12067))
* LED Matrix: Clean up includes ([#12197](https://github.com/qmk/qmk_firmware/pull/12197))
* Consistently use bin/qmk when that script is called ([#12286](https://github.com/qmk/qmk_firmware/pull/12286))
* LED Matrix: Additional common_features.mk tweaks ([#12187](https://github.com/qmk/qmk_firmware/pull/12187))
* LED Matrix: Fix up eeconfig code ([#12327](https://github.com/qmk/qmk_firmware/pull/12327))
* Big quantum_keycodes cleanup ([#12249](https://github.com/qmk/qmk_firmware/pull/12249))
* Fix up builds that are now too big for `develop` branch. ([#12495](https://github.com/qmk/qmk_firmware/pull/12495))
* [Keyboard] kint36: switch to sym_eager_pk debouncing ([#12626](https://github.com/qmk/qmk_firmware/pull/12626))
* [Keyboard] kint2pp: reduce input latency by ≈10ms ([#12625](https://github.com/qmk/qmk_firmware/pull/12625))
* eeprom driver: Refactor where eeprom driver initialisation (and EEPROM emulation initialisation) occurs to make it non-target-specific. ([#12671](https://github.com/qmk/qmk_firmware/pull/12671))
* Change RGB/LED Matrix to use a simple define for USB suspend ([#12697](https://github.com/qmk/qmk_firmware/pull/12697), [#12770](https://github.com/qmk/qmk_firmware/pull/12770 "Fixing transport's led/rgb matrix suspend state logic"))
@@ -47,73 +47,79 @@ Note that some of these pins are doubled-up on ADCs with the same channel. This
Also note that the F0 and F3 use different numbering schemes. The F0 has a single ADC and the channels are 0-indexed, whereas the F3 has 4 ADCs and the channels are 1-indexed. This is because the F0 uses the `ADCv1` implementation of the ADC, whereas the F3 uses the `ADCv3` implementation.
<sup>¹ As of ChibiOS 20.3.4, the ADC driver for STM32F1xx devices supports only ADC1, therefore any configurations involving ADC2 or ADC3 cannot actually be used. In particular, pins `F6`…`F10`, which are present at least on some STM32F103x[C-G] devices, cannot be used as ADC inputs because of this driver limitation.</sup>
<sup>² Not all STM32F4xx devices have ADC2 and/or ADC3, therefore some configurations shown in this table may be unavailable; in particular, pins `F4`…`F10` cannot be used as ADC inputs on devices which do not have ADC3. Check the device datasheet to confirm which pin functions are supported.</sup>
## Functions
@@ -141,10 +147,10 @@ Also note that the F0 and F3 use different numbering schemes. The F0 has a singl
The ARM implementation of the ADC has a few additional options that you can override in your own keyboards and keymaps to change how it operates. Please consult the corresponding `hal_adc_lld.h` in ChibiOS for your specific microcontroller for further documentation on your available options.
|`ADC_CIRCULAR_BUFFER`|`bool`|`false` |If `true`, then the implementation will use a circular buffer. |
|`ADC_NUM_CHANNELS` |`int` |`1` |Sets the number of channels that will be scanned as part of an ADC operation. The current implementation only supports `1`. |
|`ADC_BUFFER_DEPTH` |`int` |`2` |Sets the depth of each result. Since we are only getting a 12-bit result by default, we set this to 2 bytes so we can contain our one value. This could be set to 1 if you opt for an 8-bit or lower result.|
|`ADC_SAMPLING_RATE` |`int` |`ADC_SMPR_SMP_1P5` |Sets the sampling rate of the ADC. By default, it is set to the fastest setting. |
|`ADC_RESOLUTION` |`int` |`ADC_CFGR1_RES_12BIT`|The resolution of your result. We choose 12 bit by default, but you can opt for 12, 10, 8, or 6 bit. |
|`ADC_CIRCULAR_BUFFER`|`bool`|`false` |If `true`, then the implementation will use a circular buffer. |
|`ADC_NUM_CHANNELS` |`int` |`1` |Sets the number of channels that will be scanned as part of an ADC operation. The current implementation only supports `1`. |
|`ADC_BUFFER_DEPTH` |`int` |`2` |Sets the depth of each result. Since we are only getting a 10-bit result by default, we set this to 2 bytes so we can contain our one value. This could be set to 1 if you opt for an 8-bit or lower result.|
|`ADC_SAMPLING_RATE` |`int` |`ADC_SMPR_SMP_1P5` |Sets the sampling rate of the ADC. By default, it is set to the fastest setting. |
|`ADC_RESOLUTION` |`int` |`ADC_CFGR1_RES_10BIT` or `ADC_CFGR_RES_10BITS`|The resolution of your result. We choose 10 bit by default, but you can opt for 12, 10, 8, or 6 bit. Different MCUs use slightly different names for the resolution constants. |
This command lets you connect to keyboard consoles to get debugging messages. It only works if your keyboard firmware has been compiled with `CONSOLE_ENABLED=yes`.
Connect to all available keyboards and show their console messages:
```
qmk console
```
List all devices:
```
qmk console -l
```
Show only messages from clueboard/66/rev3 keyboards:
```
qmk console -d C1ED:2370
```
Show only messages from the second clueboard/66/rev3:
```
qmk console -d C1ED:2370:2
```
Show timestamps and VID:PID instead of names:
```
qmk console -n -t
```
Disable bootloader messages:
```
qmk console --no-bootloaders
```
## `qmk doctor`
This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
@@ -131,6 +179,16 @@ Check your environment and report problems only:
qmk doctor -n
## `qmk format-json`
Formats a JSON file in a (mostly) human-friendly way. Will usually correctly detect the format of the JSON (info.json or keymap.json) but you can override this with `--format` if neccesary.
**Usage**:
```
qmk format-json [-f FORMAT] <json_file>
```
## `qmk info`
Displays information about keyboards and keymaps in QMK. You can use this to get information about a keyboard, show the layouts, display the underlying key matrix, or to pretty-print JSON keymaps.
**Note:** Parsing C source files is not easy, therefore this subcommand may not work your keymap. In some cases not using the C pre-processor helps.
**Note:** Parsing C source files is not easy, therefore this subcommand may not work with your keymap. In some cases not using the C pre-processor helps.
**Usage**:
@@ -218,6 +276,18 @@ This command is directory aware. It will automatically fill in KEYBOARD if you a
qmk list-keymaps -kb planck/ez
```
## `qmk new-keyboard`
This command creates a new keyboard based on available templates.
This command will prompt for input to guide you though the generation process.
**Usage**:
```
qmk new-keyboard
```
## `qmk new-keymap`
This command creates a new keymap based on a keyboard's existing default keymap.
If you are using Bash 4.2 or later, Zsh, or FiSH you can enable Tab Completion for the QMK CLI. This will let you tab complete the names of flags, keyboards, files, and other `qmk` options.
## Setup
There are several ways you can setup tab completion.
### For Your User Only
Add this to the end of your `.profile` or `.bashrc`:
source ~/qmk_firmware/util/qmk_tab_complete.sh
If you put `qmk_firmware` into another location you will need to adjust this path.
### System Wide Symlink
If you want the tab completion available to all users of the system you can add a symlink to the `qmk_tab_complete.sh` script:
In some cases a symlink may not work. Instead you can copy the file directly into place. Be aware that updates to the tab complete script may happen from time to time, you will want to recopy the file periodically.
@@ -30,18 +30,38 @@ If you find that you can no longer type with the keyboard, you may have accident

Open the Device Manager and look for a device that looks like your keyboard.
Open the Device Manager, select **View → Devices by container**, and look for an entry with your keyboard's name.


Right-click it and hit **Uninstall device**. Make sure to tick **Delete the driver software for this device** first.
Right-click each entry and hit **Uninstall device**. Make sure to tick **Delete the driver software for this device** first if it appears.

Click **Action → Scan for hardware changes**. At this point, you should be able to type again. Double check in Zadig that the keyboard device(s) are using the `HidUsb` driver. If so, you're all done, and your board should be functional again! Otherwise, repeat the process until Zadig reports the correct driver.
Click **Action → Scan for hardware changes**. At this point, you should be able to type again. Double check in Zadig that the keyboard device(s) are using the `HidUsb` driver. If so, you're all done, and your board should be functional again! Otherwise, repeat this process until Zadig reports the correct driver.
?> A full reboot of your computer may sometimes be necessary at this point, to get Windows to pick up the new driver.
## Uninstallation
Uninstallation of bootloader devices is a little more involved than installation.
Open the Device Manager, select **View → Devices by container**, and look for the bootloader device. Match up the USB VID and PID in Zadig with one from [the table below](#list-of-known-bootloaders).
Find the `Inf name` value in the Details tab of the device properties. This should generally be something like `oemXX.inf`:

Then, open a new Command Prompt window as an Administrator (type in `cmd` into the Start menu and press Ctrl+Shift+Enter). Run `pnputil /enum-drivers` to verify the `Inf name` matches the `Published Name` field of one of the entries:

Run `pnputil /delete-driver oemXX.inf /uninstall`. This will delete the driver and remove it from any devices using it. Note that this will not uninstall the device itself.
As with the previous section, this process may need to be repeated multiple times, as multiple drivers can be applicable to the same device.
!> **WARNING:** Be *extremely careful* when doing this! You could potentially uninstall the driver for some other critical device. If you are unsure, double check the output of `/enum-drivers`, and omit the `/uninstall` flag when running `/delete-driver`.
## List of Known Bootloaders
This is a list of known bootloader devices and their USB vendor and product IDs, as well as the correct driver to assign for flashing with QMK. Note that the usbser and HidUsb drivers are built in to Windows, and cannot be assigned with Zadig - if your device has an incorrect driver, you must use the Device Manager to uninstall it as described in the previous section.
@@ -28,7 +28,7 @@ For compatible platforms, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) can
Prefer a terminal based solution? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
## Sending Your Own Debug Messages
## Sending Your Own Debug Messages :id=debug-api
Sometimes it's useful to print debug messages from within your [custom code](custom_quantum_functions.md). Doing so is pretty simple. Start by including `print.h` at the top of your file:
@@ -109,6 +109,19 @@ If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes
You may need privileges to access the device an OS like Linux. Try `sudo hid_listen`.
On many Linux distros you can avoid having to run hid_listen as root
by creating a file called `/etc/udev/rules.d/70-hid-listen.rules` with
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)`, `LOPT(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)`|`ROPT(kc)`, `ALGR(kc)`|Hold Right Alt and press `kc` |
|`RGUI(kc)`|`RCMD(kc)`, `LWIN(kc)`|Hold Right GUI and press `kc` |
|`LSG(kc)`|`SGUI(kc)`, `SCMD(kc)`, `SWIN(kc)`|Hold Left Shift and GUI and press `kc` |
|`LAG(kc)` | |Hold Left Alt and Left GUI and press `kc` |
|`RSG(kc)` | |Hold Right Shift and Right GUI and press `kc` |
|`RAG(kc)` | |Hold Right Alt and Right GUI and press `kc` |
|`LCA(kc)` | |Hold Left Control and Alt and press `kc` |
|`LSA(kc)` | |Hold Left Shift and Left Alt and press `kc` |
|`RSA(kc)` |`SAGR(kc)` |Hold Right Shift and Right Alt (AltGr) and press `kc` |
|`RCS(kc)` | |Hold Right Control and Right Shift 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))` or `C(A(KC_DEL))` makes a key that sends Control+Alt+Delete with a single keypress.
# Checking Modifier State :id=checking-modifier-state
The current modifier state can mainly be accessed with two functions: `get_mods()` for normal modifiers and modtaps and `get_oneshot_mods()` for one-shot modifiers (unless they're held, in which case they act like normal modifier keys).
The presence of one or more specific modifiers in the current modifier state can be detected by ANDing the modifier state with a mod mask corresponding to the set of modifiers you want to match for. The reason why bitwise operators are used is that the modifier state is stored as a single byte in the format (GASC)<sub>R</sub>(GASC)<sub>L</sub>.
Thus, to give an example, `01000010` would be the internal representation of LShift+RAlt.
For more information on bitwise operators in C, click [here](https://en.wikipedia.org/wiki/Bitwise_operations_in_C) to open the Wikipedia page on the topic.
In practice, this means that you can check whether a given modifier is active with `get_mods() & MOD_BIT(KC_<modifier>)` (see the [list of modifier keycodes](keycodes_basic.md#modifiers)) or with `get_mods() & MOD_MASK_<modifier>` if the difference between left and right hand modifiers is not important and you want to match both. Same thing can be done for one-shot modifiers if you replace `get_mods()` with `get_oneshot_mods()`.
To check that *only* a specific set of mods is active at a time, AND the modifier state and your desired mod mask as explained above and compare the result to the mod mask itself: `get_mods() & <mod mask> == <mod mask>`.
For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT)) == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
Aside from accessing the currently active modifiers using `get_mods()`, there exists some other functions you can use to modify the modifier state, where the `mods` argument refers to the modifiers bitmask.
*`add_mods(mods)`: Enable `mods` without affecting any other modifiers
*`register_mods(mods)`: Like `add_mods` but send a keyboard report immediately.
*`del_mods(mods)`: Disable `mods` without affecting any other modifiers
*`unregister_mods(mods)`: Like `del_mods` but send a keyboard report immediately.
*`set_mods(mods)`: Overwrite current modifier state with `mods`
*`clear_mods()`: Reset the modifier state by disabling all modifiers
Similarly, in addition to `get_oneshot_mods()`, there also exists these functions for one-shot mods:
*`add_oneshot_mods(mods)`: Enable `mods` without affecting any other one-shot modifiers
*`del_oneshot_mods(mods)`: Disable `mods` without affecting any other one-shot modifiers
*`set_oneshot_mods(mods)`: Overwrite current one-shot modifier state with `mods`
*`clear_oneshot_mods()`: Reset the one-shot modifier state by disabling all one-shot modifiers
## Examples :id=examples
The following examples use [advanced macro functions](feature_macros.md#advanced-macro-functions) which you can read more about in the [documentation page on macros](feature_macros.md).
### Alt + Escape for Alt + Tab :id=alt-escape-for-alt-tab
Simple example where chording Left Alt with `KC_ESC` makes it behave like `KC_TAB` for alt-tabbing between applications. This example strictly checks if only Left Alt is active, meaning you can't do Alt+Shift+Esc to switch between applications in reverse order. Also keep in mind that this removes the ability to trigger the actual Alt+Escape keyboard shortcut, though it keeps the ability to do AltGr+Escape.
// No need to register KC_LALT because it's already active.
// The Alt modifier will apply on this KC_TAB.
register_code(KC_TAB);
}else{
unregister_code(KC_TAB);
}
// Do not let QMK process the keycode further
returnfalse;
}
// Else, let QMK process the KC_ESC keycode as usual
returntrue;
}
returntrue;
};
```
### Shift + Backspace for Delete :id=shift-backspace-for-delete
Advanced example where the original behaviour of shift is cancelled when chorded with `KC_BSPC` and is instead fully replaced by `KC_DEL`. Two main variables are created to make this work well: `mod_state` and `delkey_registered`. The first one stores the modifier state and is used to restore it after registering `KC_DEL`. The second variable is a boolean variable (true or false) which keeps track of the status of `KC_DEL` to manage the release of the whole Backspace/Delete key correctly.
As opposed to the previous example, this doesn't use strict modifier checking. Pressing `KC_BSPC` while one or two shifts are active is enough to trigger this custom code, regardless of the state of other modifiers. That approach offers some perks: Ctrl+Shift+Backspace lets us delete the next word (Ctrl+Delete) and Ctrl+Alt+Shift+Backspace lets us execute the Ctrl+Alt+Del keyboard shortcut.
// Store the current modifier state in the variable for later reference
mod_state=get_mods();
switch(keycode){
caseKC_BSPC:
{
// Initialize a boolean variable that keeps track
// of the delete key status: registered or not?
staticbooldelkey_registered;
if(record->event.pressed){
// Detect the activation of either shift keys
if(mod_state&MOD_MASK_SHIFT){
// First temporarily canceling both shifts so that
// shift isn't applied to the KC_DEL keycode
del_mods(MOD_MASK_SHIFT);
register_code(KC_DEL);
// Update the boolean variable to reflect the status of KC_DEL
delkey_registered=true;
// Reapplying modifier state so that the held shift key(s)
// still work even after having tapped the Backspace/Delete key.
set_mods(mod_state);
returnfalse;
}
}else{// on release of KC_BSPC
// In case KC_DEL is still being sent even after the release of KC_BSPC
if(delkey_registered){
unregister_code(KC_DEL);
delkey_registered=false;
returnfalse;
}
}
// Let QMK process the KC_BSPC keycode as usual outside of shift
returntrue;
}
}
returntrue;
};
```
# Legacy Content :id=legacy-content
This page used to encompass a large set of features. We have moved many sections that used to be part of this page to their own pages. Everything below this point is simply a redirect so that people following old links on the web find what they're looking for.
@@ -8,7 +8,7 @@ To activate this feature, add `AUDIO_ENABLE = yes` to your `rules.mk`.
On Atmega32U4 based boards, up to two simultaneous tones can be rendered.
With one speaker connected to a PWM capable pin on PORTC driven by timer 3 and the other on one of the PWM pins on PORTB driven by timer 1.
The following pins can be configured as audio outputs in `config.h` - for one speaker set eiter one out of:
The following pins can be configured as audio outputs in `config.h` - for one speaker set either one out of:
*`#define AUDIO_PIN C4`
*`#define AUDIO_PIN C5`
@@ -131,12 +131,14 @@ You can override the default songs by doing something like this in your `config.
```c
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(STARTUP_SOUND)
#define STARTUP_SONG SONG(STARTUP_SOUND)
#endif
```
A full list of sounds can be found in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) - feel free to add your own to this list! All available notes can be seen in [quantum/audio/musical_notes.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/musical_notes.h).
Additionally, if you with to maintain your own list of songs (such as ones that may be copyrighted) and not have them added to the repo, you can create a `user_song_list.h` file and place it in your keymap (or userspace) folder. This file will be automatically included, it just needs to exist.
To play a custom sound at a particular time, you can define a song like this (near the top of the file):
```c
@@ -166,7 +168,7 @@ The available keycodes for audio are:
!> 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.
## Tempo
the 'speed' at which SONGs are played is dictated by the set Tempo, which is measured in beats-per-minute. Note lenghts are defined relative to that.
the 'speed' at which SONGs are played is dictated by the set Tempo, which is measured in beats-per-minute. Note lengths are defined relative to that.
The initial/default tempo is set to 120 bpm, but can be configured by setting `TEMPO_DEFAULT` in `config.c`.
There is also a set of functions to modify the tempo from within the user/keymap code:
```c
@@ -291,7 +293,7 @@ You can configure the default, min and max frequencies, the stepping and built i
|--------|---------------|-------------|
| `AUDIO_CLICKY_FREQ_DEFAULT` | 440.0f | Sets the default/starting audio frequency for the clicky sounds. |
| `AUDIO_CLICKY_FREQ_MIN` | 65.0f | Sets the lowest frequency (under 60f are a bit buggy). |
| `AUDIO_CLICKY_FREQ_MAX` | 1500.0f | Sets the the highest frequency. Too high may result in coworkers attacking you. |
| `AUDIO_CLICKY_FREQ_MAX` | 1500.0f | Sets 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. This is a multiplicative factor. The default steps the frequency up/down by a musical minor third. |
| `AUDIO_CLICKY_FREQ_RANDOMNESS` | 0.05f | Sets a factor of randomness for the clicks, Setting this to `0f` will make each click identical, and `1.0f` will make this sound much like the 90's computer screen scrolling/typing effect. |
| `AUDIO_CLICKY_DELAY_DURATION` | 1 | An integer note duration where 1 is 1/16th of the tempo, or a sixty-fourth note (see `quantum/audio/musical_notes.h` for implementation details). The main clicky effect will be delayed by this duration. Adjusting this to values around 6-12 will help compensate for loud switches. |
@@ -301,8 +303,7 @@ You can configure the default, min and max frequencies, the stepping and built i
## 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.
See [MIDI](feature_midi.md)
## Audio Keycodes
@@ -319,114 +320,3 @@ This is still a WIP, but check out `quantum/process_keycode/process_midi.c` to s
Most keyboards have only one backlight pin which control all backlight LEDs (especially if the backlight is connected to an hardware PWM pin).
Most keyboards have only one backlight pin which controls all backlight LEDs (especially if the backlight is connected to a hardware PWM pin).
In software PWM, it is possible to define multiple backlight pins, which 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's (or any other controllable LED) brightness at the same level as the other LEDs of the backlight. This is useful if you have mapped Control 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, as it is usually wired to a separate pin from the backlight.
!> If you return `true`, this will allow the keyboard level code to run, as well. Returning `false` will override the keyboard level code. Depending on how the keyboard level function is set up.
## Hardware
The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.
## Multiple Encoders
Multiple encoders may share pins so long as each encoder has a distinct pair of pins.
For example you can support two encoders using only 3 pins like this
```
#define ENCODERS_PAD_A { B1, B1 }
#define ENCODERS_PAD_B { B2, B3 }
```
You could even support three encoders using only three pins (one per encoder) however in this configuration, rotating two encoders which share pins simultaneously will often generate incorrect output. For example:
```
#define ENCODERS_PAD_A { B1, B1, B2 }
#define ENCODERS_PAD_B { B2, B3, B3 }
```
Here rotating Encoder 0 `B1 B2` and Encoder 1 `B1 B3` could be interpreted as rotating Encoder 2 `B2 B3` or `B3 B2` depending on the timing. This may still be a useful configuration depending on your use case
@@ -19,12 +19,10 @@ These functions allow you to activate layers in various ways. Note that layers a
### Caveats :id=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`. Specifically, dual function keys like `LT` and `MT` use a 16bit keycode. 4 bits are used for the function identifier, the next 12 are divided into the parameters. Layer Tap uses 4 bits for the layer (and is why it's limited to layers 0-15, actually), while Mod Tap does the same, 4 bits for the identifier, 4 bits for which mods are used, and all of them use 8 bits for the keycode. Because of this, the keycode used is limited to `0xFF` (0-255), which are the basic keycodes only.
Currently, the `layer` argument of`LT()`is limited to layers 0-15, and the `kc` argument to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. This is because QMK uses 16-bit keycodes, of which 4 bits are used for the function identifier and 4 bits for the layer, leaving only 8 bits for the keycode.
Expanding this would be complicated, at best. Moving to a 32-bit keycode would solve a lot of this, but would double the amount of space that the keymap matrix uses. And it could potentially cause issues, too. If you need to apply modifiers to your tapped keycode, [Tap Dance](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.
## Working with Layers :id=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.
Sometimes your leader key is not on a comfortable places as the rest of keys on your sequence. Imagine that your leader key is one of your outer top right keys, you may need to reposition your hand just to reach your leader key.
This can make typing the entire sequence on time hard even if you are able to type most of the sequence fast. For example, if your sequence is `Leader + asd` typing `asd` fast is very easy once you have your hands in your home row. However starting the sequence in time after moving your hand out of the home row to reach the leader key and back is not.
To remove the stress this situation produces to your hands you can enable an infinite timeout just for the leader key. This mean that, after you hit the leader key you will have an infinite amount of time to start the rest of the sequence, allowing you to proper position your hands on the best position to type the rest of the sequence comfortably.
This infinite timeout only affects the leader key, so in our previous example of `Leader + asd` you will have an infinite amount of time between `Leader` and `a`, but once you start the sequence the timeout you have configured (global or per key) will work normally.
This way you can configure a very short `LEADER_TIMEOUT` but still have plenty of time to position your hands.
In order to enable this, place this in your `config.h`:
```c
#define LEADER_NO_TIMEOUT
```
## Strict Key Processing
By default, the Leader Key feature will filter the keycode out of [`Mod-Tap`](mod_tap.md) and [`Layer Tap`](feature_layers.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.
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
## Driver configuration :id=driver-configuration
---
### IS31FL3731 :id=is31fl3731
### 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`:
There is basic support for addressable LED matrix lighting with the I2C IS31FL3731 LED controller. To enable it, add this to your `rules.mk`:
```make
LED_MATRIX_ENABLE= yes
@@ -19,7 +19,7 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>
| Variable | Description | Default |
|----------|-------------|---------|
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages | 100 |
| `ISSI_TIMEOUT` | (Optional) How long to wait for i2c messages, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `LED_DRIVER_COUNT` | (Required) How many LED driver IC's are present | |
| `DRIVER_LED_TOTAL` | (Required) How many LED lights are present across all drivers | |
@@ -42,59 +42,338 @@ Here is an example using 2 drivers.
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
!> Note the parentheses, this is so when `LED_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() % (LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL)` will give very different results than `rand() % LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL`.
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
* | LED address
* | | */
{0,C1_1},
{0,C1_15},
// ...
}
constis31_ledg_is31_leds[DRIVER_LED_TOTAL]={
/* Refer to IS31 manual for these locations
* driver
* | LED address
* | | */
{0,C1_1},
{0,C1_15},
// ...
}
```
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://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).
## Common Configuration :id=common-configuration
## 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`:
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 `{ x, y }` position on the keyboard. The default expected range of values for `{ x, y }` is the inclusive range `{ 0..224, 0..64 }`. This default expected range is due to effects that calculate the center of the keyboard for their animations. The easiest way to calculate these positions is imagine your keyboard is a grid, and the top left of the keyboard represents `{ x, y }` coordinate `{ 0, 0 }` and the bottom right of your keyboard represents `{ 224, 64 }`. Using this as a basis, you can use the following formula to calculate the physical position:
```c
x=224/(NUMBER_OF_COLS-1)*COL_POSITION
y=64/(NUMBER_OF_ROWS-1)*ROW_POSITION
```
Where NUMBER_OF_COLS, NUMBER_OF_ROWS, COL_POSITION, & ROW_POSITION are all based on the physical layout of your keyboard, not the electrical layout.
As mentioned earlier, the center of the keyboard by default is expected to be `{ 112, 32 }`, but this can be changed if you want to more accurately calculate the LED's physical `{ x, y }` positions. Keyboard designers can implement `#define LED_MATRIX_CENTER { 112, 32 }` in their config.h file with the new center point of the keyboard, or where they want it to be allowing more possibilities for the `{ x, y }` values. Do note that the maximum value for x or y is 255, and the recommended maximum is 224 as this gives animations runoff room before they reset.
`// LED Index to Flag` is a bitmask, whether or not a certain LEDs is of a certain type. It is recommended that LEDs are set to only 1 type.
## Custom LED Matrix Effects :id=custom-led-matrix-effects
By setting `LED_MATRIX_CUSTOM_USER` (and/or `LED_MATRIX_CUSTOM_KB`) in `rules.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
To declare new effects, create a new `led_matrix_user/kb.inc` that looks something like this:
`led_matrix_user.inc` should go in the root of the keymap directory.
`led_matrix_kb.inc` should go in the root of the keyboard directory.
To use custom effects in your code, simply prepend `LED_MATRIX_CUSTOM_` to the effect name specified in `LED_MATRIX_EFFECT()`. For example, an effect declared as `LED_MATRIX_EFFECT(my_cool_effect)` would be referenced with:
#define LED_DISABLE_TIMEOUT 0 // number of milliseconds to wait until led automatically turns off
#define LED_DISABLE_AFTER_TIMEOUT 0 // OBSOLETE: number of ticks to wait until disabling effects
#define LED_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
#define LED_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 LED_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 LED_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs
#define LED_MATRIX_STARTUP_MODE LED_MATRIX_SOLID // Sets the default mode, if none has been set
#define LED_MATRIX_STARTUP_VAL LED_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define LED_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
#define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If LED_MATRIX_KEYPRESSES or LED_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
```
## EEPROM storage :id=eeprom-storage
The EEPROM for it is currently shared with the RGB Matrix system (it's generally assumed only one feature would be used at a time), but could be configured to use its own 32bit address with:
|`led_matrix_set_value_all(v)` |Set all of the LEDs to the given value, where `v` is between 0 and 255 (not written to EEPROM) |
|`led_matrix_set_value(index, v)` |Set a single LED to the given value, where `v` is between 0 and 255, and `index` is between 0 and `DRIVER_LED_TOTAL` (not written to EEPROM) |
|`led_matrix_mode(mode)` |Set the mode, if LED animations are enabled |
|`led_matrix_mode_noeeprom(mode)` |Set the mode, if LED animations are enabled (not written to EEPROM) |
|`led_matrix_step()` |Change the mode to the next LED animation in the list of enabled LED animations |
|`led_matrix_step_noeeprom()` |Change the mode to the next LED animation in the list of enabled LED animations (not written to EEPROM) |
|`led_matrix_step_reverse()` |Change the mode to the previous LED animation in the list of enabled LED animations |
|`led_matrix_step_reverse_noeeprom()` |Change the mode to the previous LED animation in the list of enabled LED animations (not written to EEPROM) |
|`led_matrix_increase_speed()` |Increase the speed of the animations |
|`led_matrix_increase_speed_noeeprom()` |Increase the speed of the animations (not written to EEPROM) |
|`led_matrix_decrease_speed()` |Decrease the speed of the animations |
|`led_matrix_decrease_speed_noeeprom()` |Decrease the speed of the animations (not written to EEPROM) |
|`led_matrix_set_speed(speed)` |Set the speed of the animations to the given value where `speed` is between 0 and 255 |
|`led_matrix_set_speed_noeeprom(speed)` |Set the speed of the animations to the given value where `speed` is between 0 and 255 (not written to EEPROM) |
|`led_matrix_is_enabled()` |Gets current on/off status |
|`led_matrix_get_mode()` |Gets current mode |
|`led_matrix_get_val()` |Gets current val |
|`led_matrix_get_speed()` |Gets current speed |
|`led_matrix_get_suspend_state()` |Gets current suspend state |
## Callbacks :id=callbacks
### Indicators :id=indicators
If you want to set custom indicators, such as an LED for Caps Lock, or layer indication, you can use the `led_matrix_indicators_kb` or `led_matrix_indicators_user` function for that:
```c
voidled_matrix_indicators_kb(void){
led_matrix_set_index_value(index,value);
led_matrix_set_color(index,value);
}
```
A similar function works in the keymap as `led_matrix_indicators_user`.
In addition, there are the advanced indicator functions. These are aimed at those with heavily customized displays, where rendering every LED per cycle is expensive. This includes a special macro to help make this easier to use: `LED_MATRIX_INDICATOR_SET_VALUE(i, v)`.
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.
?> You can also use the functions described in [Useful functions](ref_functions.md) for additional functionality. For example `reset_keyboard()` allows you to reset the keyboard as part of a macro.
?> You can also use the functions described in [Useful function](ref_functions.md) and [Checking modifier state](feature_advanced_keycodes#checking-modifier-state) for additional functionality. For example,`reset_keyboard()` allows you to reset the keyboard as part of a macro and `get_mods() & MOD_MASK_SHIFT` lets you check for the existence of active shift modifiers.
First, enable MIDI by adding the following to your `rules.mk`:
```makefile
MIDI_ENABLE= yes
```
There are two MIDI systems in QMK: basic and advanced. With basic MIDI you will only be able to send Note On and Note Off messages using the note keycodes, meaning that keycodes like `MI_OCTU` and `MI_OCTD` will not work. Advanced MIDI allows you to do things like octave shifts, channel changes, velocity changes, modulation, and more.
### Basic MIDI
To enable basic MIDI, add the following to your `config.h`:
```c
#define MIDI_BASIC
```
### Advanced MIDI
To enable advanced MIDI, add the following to your `config.h`:
```c
#define MIDI_ADVANCED
```
#### Sending Control Change (CC) Messages
If you're aiming to emulate the features of something like a Launchpad or other MIDI controller you'll need to access the internal MIDI device directly.
Because there are so many possible CC messages, not all of them are implemented as keycodes. Additionally, you might need to provide more than just two values that you would get from a keycode (pressed and released) - for example, the analog values from a fader or a potentiometer. So, you will need to implement [custom keycodes](feature_macros.md) if you want to use them in your keymap directly using `process_record_user()`.
For reference of all the possible control code numbers see [MIDI Specification](#midi-specification)
#### Example code for using Generic On Off Switches as per MIDI Specification.
```c
#includeQMK_KEYBOARD_H
externMidiDevicemidi_device;
// MIDI CC codes for generic on/off switches (80, 81, 82, 83)
You can use between 1 and 4 IS31FL3731 IC's. Do not specify `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, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
| `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
| `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
Here is an example using 2 drivers.
```c
// This is a 7-bit address, that gets left-shifted and bit 0
@@ -36,8 +49,6 @@ Configure the hardware via your `config.h`:
!> 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`:
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://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).
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://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`, `1`,`2`, or `3`).
!> For the IS31FL3737, replace all instances of `IS31FL3733` below with `IS31FL3737`.
### IS31FL3733 :id=is31fl3733
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
@@ -67,7 +76,24 @@ RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER= IS31FL3733
```
Configure the hardware via your`config.h`:
You can use between 1 and 4 IS31FL3733 IC's. Do not specify `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, in milliseconds | 100 |
| `ISSI_PERSISTENCE` | (Optional) Retry failed messages this many times | 0 |
| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | |
| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | |
| `DRIVER_ADDR_1` | (Required) Address for the first RGB driver | |
| `DRIVER_ADDR_2` | (Optional) Address for the second RGB driver | |
| `DRIVER_ADDR_3` | (Optional) Address for the third RGB driver | |
| `DRIVER_ADDR_4` | (Optional) Address for the fourth RGB driver | |
| `DRIVER_SYNC_1` | (Optional) Sync configuration for the first RGB driver | 0 |
| `DRIVER_SYNC_2` | (Optional) Sync configuration for the second RGB driver | 0 |
| `DRIVER_SYNC_3` | (Optional) Sync configuration for the third RGB driver | 0 |
| `DRIVER_SYNC_4` | (Optional) Sync configuration for the fourth RGB driver | 0 |
Here is an example using 2 drivers.
```c
// This is a 7-bit address, that gets left-shifted and bit 0
@@ -81,6 +107,58 @@ Configure the hardware via your `config.h`:
!> 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 4 drivers are supported, but it would be trivial to support all 8 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,B_1,A_1,C_1},
....
}
```
Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](https://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` (`0`, `1`, `2`, or `3` for now).
---
### IS31FL3737 :id=is31fl3737
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3737 RGB controller. To enable it, add this to your `rules.mk`:
```makefile
RGB_MATRIX_ENABLE= yes
RGB_MATRIX_DRIVER= IS31FL3737
```
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:
// 0000 <-> GND
// 0101 <-> SCL
// 1010 <-> SDA
// 1111 <-> VCC
// ADDR represents A3:A0 of the 7-bit address.
// The result is: 0b101(ADDR)
#define DRIVER_ADDR_1 0b1010000
#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](https://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).
Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](https://www.issi.com/WW/pdf/31FL3737.pdf) and the header file `drivers/issi/is31fl3737.h`. The `driver` is the index of the driver you defined in your `config.h` (Only `0` right now).
---
@@ -151,6 +229,8 @@ Configure the hardware via your `config.h`:
---
## Common Configuration :id=common-configuration
From this point forward the configuration is the same for all the drivers. The `led_config_t` struct provides a key electrical matrix to led index lookup table, what the physical position of each LED is on the board, and what type of key or usage the LED if the LED represents. Here is a brief example:
```c
@@ -254,6 +334,9 @@ enum rgb_matrix_effects {
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
RGB_MATRIX_HUE_BREATHING,// Hue shifts up a slight ammount at the same time, then shifts back
RGB_MATRIX_HUE_PENDULUM,// Hue shifts up a slight ammount in a wave to the right, then back to the left
RGB_MATRIX_HUE_WAVE,// Hue shifts up a slight ammount and then back down in a wave to the right
#if define(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
RGB_MATRIX_TYPING_HEATMAP,// How hot is your WPM!
RGB_MATRIX_DIGITAL_RAIN,// That famous computer simulation
@@ -283,6 +366,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
#define RGB_DISABLE_TIMEOUT 0 // number of milliseconds to wait until rgb automatically turns off
#define RGB_DISABLE_AFTER_TIMEOUT 0 // OBSOLETE: number of ticks to wait until disabling effects
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
#define RGB_DISABLE_WHEN_USB_SUSPENDED // 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
@@ -439,11 +527,13 @@ These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blo
#define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
#define RGB_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
#define RGB_MATRIX_DISABLE_KEYCODES // disables control of rgb matrix by keycodes (must use code functions to control the feature)
#define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
```
## EEPROM storage :id=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:
The EEPROM for it is currently shared with the LED Matrix system (it's generally assumed only one feature would be used at a time), but could be configured to use its own 32bit address with:
!> By default, if you have both the RGB Light and the [RGB Matrix](feature_rgb_matrix.md) feature enabled, these keycodes will work for both features, at the same time. You can disable the keycode functionality by defining the `*_DISABLE_KEYCODES` option for the specific feature.
would turn the layer 0 (or 1) on and off again three times when `DEBUG` is pressed.
### Overriding RGB Lighting on/off status
Normally lighting layers are not shown when RGB Lighting is disabled (e.g. with `RGB_TOG` keycode). If you would like lighting layers to work even when the RGB Lighting is otherwise off, add `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF` to your `config.h`.
@@ -359,9 +372,9 @@ rgblight_set(); // Utility functions do not call rgblight_set() automatically, s
Example:
```c
rgblight_sethsv(HSV_WHITE,0);// led 0
rgblight_sethsv(HSV_RED,1);// led 1
rgblight_sethsv(HSV_GREEN,2);// led 2
rgblight_sethsv_at(HSV_WHITE,0);// led 0
rgblight_sethsv_at(HSV_RED,1);// led 1
rgblight_sethsv_at(HSV_GREEN,2);// led 2
// The above functions automatically calls rgblight_set(), so there is no need to call it explicitly.
// Note that it is inefficient to call repeatedly.
@@ -60,6 +60,7 @@ The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and D0/D1/D2/D3 (aka
The 4 wires of the TRRS cable need to connect GND, VCC, and SCL and SDA (aka PD0/pin 3 and PD1/pin 2, respectively) between the two Pro Micros.
The pull-up resistors may be placed on either half. If you wish to use the halves independently, it is also possible to use 4 resistors and have the pull-ups in both halves.
Note that the total resistance for the connected system should be within spec at 2.2k-10kOhm, with an 'ideal' at 4.7kOhm, regardless of the placement and number.
@@ -109,6 +110,10 @@ Normally, when a diode is connected to an intersection, it is judged to be left.
#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT
```
Note that adding a diode at a previously unused intersection will effectively tell the firmware that there is a key held down at that point. You can instruct qmk to ignore that intersection by defining `MATRIX_MASKED` and then defining a `matrix_row_t matrix_mask[MATRIX_ROWS]` array in your keyboard config. Each bit of a single value (starting form the least-significant bit) is used to tell qmk whether or not to pay attention to key presses at that intersection.
While `MATRIX_MASKED` isn't necessary to use `SPLIT_HAND_MATRIX_GRID` successfully, without it you may experience issues trying to suspend your computer with your keyboard attached as the matrix will always report at least one key-press.
#### Handedness by EEPROM
This method sets the keyboard's handedness by setting a flag in the persistent storage (`EEPROM`). This is checked when the controller first starts up, and determines what half the keyboard is, and how to orient the keyboard layout.
@@ -129,6 +134,12 @@ However, you'll have to flash the EEPROM files for the correct hand to each cont
*`:dfu-util-split-left`
*`:dfu-util-split-right`
Example:
```
make crkbd:default:avrdude-split-left
```
This setting is not changed when re-initializing the EEPROM using the `EEP_RST` key, or using the `eeconfig_init()` function. However, if you reset the EEPROM outside of the firmware's built in options (such as flashing a file that overwrites the `EEPROM`, like how the [QMK Toolbox]()'s "Reset EEPROM" button works), you'll need to re-flash the controller with the `EEPROM` files.
You can find the `EEPROM` files in the QMK firmware repo, [here](https://github.com/qmk/qmk_firmware/tree/master/quantum/split_common).
@@ -239,7 +250,12 @@ This sets how many LEDs are directly connected to each controller. The first nu
```c
#define SPLIT_USB_DETECT
```
This option changes the startup behavior to detect an active USB connection when delegating master/slave. If this operation times out, then the half is assume to be a slave. This is the default behavior for ARM, and required for AVR Teensy boards (due to hardware limitations).
Enabling this option changes the startup behavior to listen for an active USB communication to delegate which part is master and which is slave. With this option enabled and theres's USB communication, then that half assumes it is the master, otherwise it assumes it is the slave.
Without this option, the master is the half that can detect voltage on the physical USB connection (VBUS detection).
Enabled by default on ChibiOS/ARM.
?> This setting will stop the ability to demo using battery packs.
@@ -255,9 +271,13 @@ This sets the poll frequency when detecting master/slave when using `SPLIT_USB_D
## Hardware Considerations and Mods
While most any Pro Micro can be used, micro controllers like the AVR Teensys and most (if not all) ARM boards require the Split USB Detect.
Master/slave delegation is made either by detecting voltage on VBUS connection or waiting for USB communication (`SPLIT_USB_DETECT`). Pro Micro boards can use VBUS detection out of the box and be used with or without `SPLIT_USB_DETECT`.
However, with the Teensy 2.0 and Teensy++ 2.0, there is a simple hardware mod that you can perform to add VBUS detection, so you don't need the Split USB detection option.
Many ARM boards, but not all, do not support VBUS detection. Because it is common that ARM boards lack VBUS detection, `SPLIT_USB_DETECT` is automatically defined on ARM targets (technically when ChibiOS is targetted).
### Teensy boards
Teensy boards lack VBUS detection out of the box and must have `SPLIT_USB_DETECT` defined. With the Teensy 2.0 and Teensy++ 2.0, there is a simple hardware mod that you can perform to add VBUS detection, so you don't need the `SPLIT_USB_DETECT` option.
// If the key was held down and now is released then switch off the layer
if(ql_tap_state.state==SINGLE_HOLD){
if(ql_tap_state.state==TD_SINGLE_HOLD){
layer_off(_MY_LAYER);
}
ql_tap_state.state=0;
ql_tap_state.state=TD_NONE;
}
// Associate our tap dance key with its functionality
@@ -505,7 +511,7 @@ The above code is similar to that used in previous examples. The one point to no
The use of `cur_dance()` and `ql_tap_state` mirrors the above examples.
The `case:SINGLE_TAP` in `ql_finished` is similar to the above examples. The `SINGLE_HOLD` case works in conjunction with `ql_reset()` to switch to `_MY_LAYER` while the tap dance key is held, and to switch away from `_MY_LAYER` when the key is released. This mirrors the use of `MO(_MY_LAYER)`. The `DOUBLE_TAP` case works by checking whether `_MY_LAYER` is the active layer, and toggling it on or off accordingly. This mirrors the use of `TG(_MY_LAYER)`.
The `case: TD_SINGLE_TAP` in `ql_finished` is similar to the above examples. The `TD_SINGLE_HOLD` case works in conjunction with `ql_reset()` to switch to `_MY_LAYER` while the tap dance key is held, and to switch away from `_MY_LAYER` when the key is released. This mirrors the use of `MO(_MY_LAYER)`. The `TD_DOUBLE_TAP` case works by checking whether `_MY_LAYER` is the active layer, and toggling it on or off accordingly. This mirrors the use of `TG(_MY_LAYER)`.
`tap_dance_actions[]` works similar to the above examples. Note that I used `ACTION_TAP_DANCE_FN_ADVANCED_TIME()` instead of `ACTION_TAP_DANCE_FN_ADVANCED()`. This is because I like my `TAPPING_TERM` to be short (\~175ms) for my non-tap-dance keys but find that this is too quick for me to reliably complete tap dance actions - thus the increased time of 275ms here.
@@ -126,6 +126,8 @@ The following input modes are available:
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 a different keycode. This might be required for IBus versions ≥1.5.15, where Ctrl+Shift+U behavior is consolidated into Ctrl+Shift+E.
Users who wish support in non-GTK apps without IBus may need to resort to a more indirect method, such as creating a custom keyboard layout ([more on this method](#custom-linux-layout)).
* **`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` 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.
Example uses include sending Unicode strings when a key is pressed, as described in [Macros](feature_macros.md).
### `send_unicode_hex_string()`
### `send_unicode_hex_string()` (Deprecated)
Similar to `send_unicode_string()`, but the characters are represented by their Unicode code points, written in hexadecimal and separated by spaces. For example, the table flip above would be achieved with:
@@ -270,3 +272,22 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
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).
## Software keyboard layout on Linux :id=custom-linux-layout
This method does not require Unicode support on the keyboard itself but instead uses a custom keyboard layout for Xorg. This is how special characters are inserted by regular keyboards. This does not require IBus and works in practically all software. Help on creating a custom layout can be found [here](https://www.linux.com/news/creating-custom-keyboard-layouts-x11-using-xkb/), [here](http://karols.github.io/blog/2013/11/18/creating-custom-keyboard-layouts-for-linux/) and [here](https://wiki.archlinux.org/index.php/X_keyboard_extension). An example of how you could edit the `us` layout to gain 🤣 on `RALT(KC_R)`:
Edit the keyboard layout file `/usr/share/X11/xkb/symbols/us`.
Find the line defining the R key and add an entry to the list, making it look like this:
```
key <AD04> { [ r, R, U1F923 ] };
```
Save the file and run the command `setxkbmap us` to reload the layout.
You can define one custom character for key defined in the layout, and another if you populate the fourth layer. Additional layers up to 8th are also possible.
This method is specific to the computer on which you set the custom layout. The custom keys will be available only when Xorg is running. To avoid accidents, you should always reload the layout using `setxkbmap`, otherwise an invalid layout could prevent you from logging into your system, locking you out.
|`get_current_wpm(void)` | Returns the current WPM as a value between 0-255 |
|`set_current_wpm(x)` | Sets the current WPM to `x` (between 0-255) |
## Callbacks
## Customized keys for WPM calc
By default, the WPM score only includes letters, numbers, space and some punctuation. If you want to change the set of characters considered as part of the WPM calculation, you can implement your own `bool wpm_keycode_user(uint16_t keycode)` and return true for any characters you would like included in the calculation, or false to not count that particular keycode.
By default, the WPM score only includes letters, numbers, space and some
punctuation. If you want to change the set of characters considered as part of
the WPM calculation, you can implement `wpm_keycode_user(uint16_t keycode)`
and return true for any characters you would like included in the calculation,
Additionally, if `WPM_ALLOW_COUNT_REGRESSION` is defined, there is the `uint8_t wpm_regress_count(uint16_t keycode)` function that allows you to decrease the WPM. This is useful if you want to be able to penalize certain keycodes (or even combinations).
QMK (*Quantum Mechanical Keyboard*) est une communauté open source qui maintient le firmware QMK, la QMK Toolbox (*Boite à outil*), qmk.fm et leurs documentations. QMKFirmware est un firmware dédié aux claviers qui est basé sur [tmk\_keyboard](https://github.com/tmk/tmk_keyboard). Il offre des fonctionnalités très utiles pour les contrôleurs Atmel AVR, et, plus spécifiquement pour [les produits d'OLKB](https://olkb.com), le clavier [ErgoDox EZ](https://www.ergodox-ez.com), et pour les [produits Clueboard](https://clueboard.co/). Il prend désormais aussi en charge les processeurs ARM qui utilisent ChibiOS. Vous pouvez l'utiliser pour contrôler un clavier personnalisé soudé à la main ou alors sur un clavier avec un PCB personnalisé.
QMK (*Quantum Mechanical Keyboard*) est une communauté open source qui maintient le firmware QMK, la QMK Toolbox (*Boite à outil*), qmk.fm et leurs documentations. QMKFirmware est un firmware dédié aux claviers qui est basé sur [tmk\_keyboard](https://github.com/tmk/tmk_keyboard). Il offre des fonctionnalités très utiles pour les contrôleurs Atmel AVR, et, plus spécifiquement pour [les produits d'OLKB](https://olkb.com), le clavier [ErgoDox EZ](https://www.ergodox-ez.com), et pour les [produits Clueboard](https://clueboard.co/). Il prend désormais aussi en charge les processeurs ARM qui utilisent ChibiOS. Vous pouvez l'utiliser pour contrôler un clavier personnalisé soudé à la main ou alors sur un clavier avec un PCB personnalisé.
## Comment l'obtenir
@@ -23,7 +23,7 @@ Avant d'être prêt à compiler vous allez devoir [installer un environnement](f
make planck/rev4:default
Cette commande compilera la révision `rev4` du clavier `planck` avec la disposition `default`. Notez que tous les claviers n'ont pas forcément de révisions (aussi appelées sous-projects ou dossiers, ou en anglais «subprojects» ou «folder»). Cette option peut donc être omise:
Cette commande compilera la révision `rev4` du clavier `planck` avec la disposition `default`. Notez que tous les claviers n'ont pas forcément de révisions (aussi appelées sous-projects ou dossiers, ou en anglais «subprojects» ou «folder»). Cette option peut donc être omise:
@@ -9,7 +9,7 @@ Nous vous recommandons d'utiliser l'utilitaire [Zadig](https://zadig.akeo.ie/).
## Installation
Passez votre clavier en mode bootloader, soit en appuyant sur le keycode `RESET` (qui peut se trouver dans un calque différent) ou en appuyant sur le bouton reset qui se trouve en général sous la board. Si votre clavier n'a aucune de ces options, essayez de le brancher en maintenant Escape ou Espace+`B` appuyés (voir la documentation de [Bootmagic](feature_bootmagic.md) pour plus de détails). Certaines boards utilisent [Command](feature_command.md) à la place de Bootmagic. Dans ce cas, vous pouvez entrer en mode bootloader en appuyant, à n'importe quel moment lorsque le clavier est branché, sur les combinaisons de touches Shift Gauche+Shift Droit+`B` ou Shift Gauche+Shift Droit+Escape.
Certains claviers ont des instructions spécifiques pour passer en mode bootloader. Par exemple, la touche [Bootmagic Lite]](feature_bootmagic.md#bootmagic-lite) (défaut:Échap) peut être sur une touche différente telle que Contrôle Gauche. La combinaison pour la Command (défaut:Shift Gauche+Shift Droit) peut être différente, par exemple Contrôle Gauche+Contrôle Droit. Référez-vous au fichier README de votre clavier.
Certains claviers ont des instructions spécifiques pour passer en mode bootloader. Par exemple, la touche [Bootmagic Lite]](feature_bootmagic.md#bootmagic-lite) (défaut: Échap) peut être sur une touche différente telle que Contrôle Gauche. La combinaison pour la Command (défaut: Shift Gauche+Shift Droit) peut être différente, par exemple Contrôle Gauche+Contrôle Droit. Référez-vous au fichier README de votre clavier.
Pour mettre un clavier en mode bootloader avec USBaspLoader, appuyez sur le bouton `RESET` tout en maintenant le bouton `BOOT`. Vous pouvez aussi maintenir le bouton `BOOT` en branchant le câble USB.
@@ -43,4 +43,4 @@ Cliquez dessus avec le bouton droit et sélectionner **Désinstaller le périph

Appuyez sur **Action → Analyser les changements de hardware**. A ce stade, vous devriez pouvoir saisir à nouveau. Vérifiez dans Zadig que les périphériques utilisent bien le pilote `HidUsb`. Si c'est le cas, vous avez corrigé le problème, votre clavier devrait fonctionner à nouveau!
Appuyez sur **Action → Analyser les changements de hardware**. A ce stade, vous devriez pouvoir saisir à nouveau. Vérifiez dans Zadig que les périphériques utilisent bien le pilote `HidUsb`. Si c'est le cas, vous avez corrigé le problème, votre clavier devrait fonctionner à nouveau!
@@ -20,7 +20,7 @@ Veuillez noter que lancer `make` avec `sudo` est généralement une **mauvaise**
### Règles `udev` pour Linux
Sous Linux, vous aurez besoin des permissions appropriées pour accéder au MCU (le micro-contrôleur). Vous avez le choix d'utiliser `sudo` en flashant le firmware, ou placer ces fichiers dans `/etc/udev/rules.d`. Une fois ajouté, lancez les commandes suivantes:
Sous Linux, vous aurez besoin des permissions appropriées pour accéder au MCU (le micro-contrôleur). Vous avez le choix d'utiliser `sudo` en flashant le firmware, ou placer ces fichiers dans `/etc/udev/rules.d`. Une fois ajouté, lancez les commandes suivantes:
@@ -6,13 +6,13 @@ Cette page détaille diverses questions fréquemment posées par les utilisateur
## `hid_listen` ne reconnaît pas de périphérique
Lorsque la console de débugage sur votre périphérique n'est pas prêt, vous obtiendrez un message similaire:
Lorsque la console de débugage sur votre périphérique n'est pas prêt, vous obtiendrez un message similaire:
```
Waiting for device:.........
```
Une fois le périphérique connecté, *hid_listen* le trouve et vous obtiendrez ce message:
Une fois le périphérique connecté, *hid_listen* le trouve et vous obtiendrez ce message:
```
Waiting for new device:.........................
@@ -61,7 +61,7 @@ Vous ne voulez probablement pas "briquer" votre clavier, rendre impossible d'éc
- Si votre map de clavier n'inclut pas de RESET, pour entrer en mode DFU, vous devrez appuyer sur le bouton reset du PCB. Cela implique que vous devrez certainement dévisser certaines pièces de votre clavier pour y accéder.
- Modifier les fichiers tmk_core / common peut rendre le clavier inutilisable
- Si un fichier .hex trop large est la cause du problème: `make dfu` supprime le bloc puis teste la taille (il ne fait pas les choses dans le bon ordre), ce qui provoque une erreur. En résultat, le flash n’aura pas été fait et le clavier restera en mode DFU.
- Si un fichier .hex trop large est la cause du problème: `make dfu` supprime le bloc puis teste la taille (il ne fait pas les choses dans le bon ordre), ce qui provoque une erreur. En résultat, le flash n’aura pas été fait et le clavier restera en mode DFU.
- Pour finir, notez que la taille maximale d'un fichier .hex sur un Plank est de 7000h (28672 decimal)
```
@@ -118,7 +118,7 @@ Sous Windows, activez l'option `Permettre au périphérique de sortir l'ordinate
Appuyer sur n'importe quelle touche en mode veille devrait sortir l'ordinateur de veille.
## Vous utilisez un Arduino?
## Vous utilisez un Arduino?
**Faites attention au fait que le nommage des pin d'un Arduino diffère de la puce**. Par exemple, la pin `D0` n'est pas `PD0`. Vérifiez le circuit avec la fiche technique.
@@ -44,7 +44,7 @@ Le premier n'est reconnu que sur macOS, alors que le dernier, `KC_SLEP` et `KC_W
## Modificateur "One Shot"
Cette fonctionnalité permet de corriger un problème avec la touche Shift. En effet, il arrive de saisir plusieurs majuscules en ne voulant en saisir qu'une sur un mot. Ex:`CEtte` à la place de `Cette`. La fonctionnalité «One shot» shift permet de corriger ça.
Cette fonctionnalité permet de corriger un problème avec la touche Shift. En effet, il arrive de saisir plusieurs majuscules en ne voulant en saisir qu'une sur un mot. Ex: `CEtte` à la place de `Cette`. La fonctionnalité «One shot» shift permet de corriger ça.
https://github.com/tmk/tmk_keyboard/issues/67
@@ -59,7 +59,7 @@ Pour les touches de modification et les actions de calque, vous devez placer `KC
## Support de touche à verrouillage mécanique
Cette fonctionnalité permet l'usage de *touches à verrouillage mécanique* comme [ces interrupteurs Alps](https://deskthority.net/wiki/Alps_SKCL_Lock). Vous pouvez l'activer en ajoutant ceci à votre `config.h`:
Cette fonctionnalité permet l'usage de *touches à verrouillage mécanique* comme [ces interrupteurs Alps](https://deskthority.net/wiki/Alps_SKCL_Lock). Vous pouvez l'activer en ajoutant ceci à votre `config.h`:
* [dfu-programmer](https://github.com/dfu-programmer/dfu-programmer) / `:dfu` avec QMK (outil en ligne de commande recommandé)
Ordre des actions:
Ordre des actions:
1. Pressez le keycode `RESET`, ou appuyez sur le bouton physique RESET ou alors créez un contact entre RST et GND.
2. Attendez que l'OS detecte l'appareil.
3. Éffacez la mémoire, cela peut être fait automatiquement.
4. Flasher le fichier .hex.
5. Redémarrez l'appareil en mode «application», cela peut être fait automatiquement.
5. Redémarrez l'appareil en mode «application», cela peut être fait automatiquement.
Alternativement:
Alternativement:
make <keyboard>:<keymap>:dfu
@@ -48,11 +48,11 @@ QMK a un fork du bootloader LUFA DFU qui vous permet de faire un simple scan de
#define QMK_LED E6
#define QMK_SPEAKER C6
Le fabricant et le nom du produit proviennent de vos définitions dans fichier `config.h`, et la chaîne de caractère «bootloader» est ajoutée au nom du produit.
Le fabricant et le nom du produit proviennent de vos définitions dans fichier `config.h`, et la chaîne de caractère «bootloader» est ajoutée au nom du produit.
Pour génerer le bootloader, utilisez la cible `bootloader`. Exemple:`make planck/rev4:default:bootloader`.
Pour génerer le bootloader, utilisez la cible `bootloader`. Exemple: `make planck/rev4:default:bootloader`.
Pour génerer un fichier .hex prêt pour la production qui contiendra tant l'application que le bootloader, utilisez la cible `production`. Exemple:`make planck/rev4:default:production`.
Pour génerer un fichier .hex prêt pour la production qui contiendra tant l'application que le bootloader, utilisez la cible `production`. Exemple: `make planck/rev4:default:production`.
### Commandes DFU
@@ -67,7 +67,7 @@ Il y a plusieurs commandes DFU que vous pouvez utiliser pour flasher le firmware
Les cartes arduinos et leurs clones utilisent le [bootloader Caterina](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) (tous les claviers utilisant un Pro Micro, ou un clone). Ils utilisent aussi le protocole avr109 pour communiquer en virtuellement en série (serial en anglais). Les bootloaders comme le [A-Star](https://www.pololu.com/docs/0J61/9) sont basés sur Caterina.
Pour vérifier la compatibilité avec un bootloader Caterina, vérifiez que ce bloc est présent dans votre fichier `rules.mk`:
Pour vérifier la compatibilité avec un bootloader Caterina, vérifiez que ce bloc est présent dans votre fichier `rules.mk`:
```make
# Bootloader selection
@@ -81,20 +81,20 @@ Pour vérifier la compatibilité avec un bootloader Caterina, vérifiez que ce b
1. Pressez la touche avec le keycode `RESET`, ou reliez les ports GND et RST. Vous n'avez que 7 secondes pour flasher une fois que l'opération a été faite.
2. Attendez que l'OS détecte l'appareil.
3. Flasher le fichier .hex.
4. Attendez que l'appareil redémarre automatiquement.
ou, utilisez:
ou, utilisez:
make <keyboard>:<keymap>:avrdude
@@ -111,7 +111,7 @@ Il existe un certain nombre de commandes DFU que vous pouvez utiliser pour mettr
Halfkay est un protocole ultra-simple développé par PJRC qui utilise HID et qui est fourni avec tous les Teensys après le modèle 2.0.
Pour vérifier la compatibilité avec le booloader Halfkay, vérifiez que ce bloc est présent dans votre fichier `rules.mk`:
Pour vérifier la compatibilité avec le booloader Halfkay, vérifiez que ce bloc est présent dans votre fichier `rules.mk`:
```make
# Bootloader selection
@@ -125,24 +125,24 @@ Pour vérifier la compatibilité avec le booloader Halfkay, vérifiez que ce blo
[Teensy Loader en ligne de commande](https://www.pjrc.com/teensy/loader_cli.html) (Outil en ligne de commande recommandé)
Séquence de flash:
Séquence de flash:
1. Pressez la touche du keycode `RESET`, ou reliez les ports RST et GND rapidement. Vous avez ensuite 7 secondes pour réaliser le flash.
2. Attendez que l'OS détecte l'appareil.
3. Flasher le fichier .hex.
4. Redémarrez l'appareil en mode «application». Cela peut être fait automatiquement.
4. Redémarrez l'appareil en mode «application». Cela peut être fait automatiquement.
## USBasploader
USBasploader est un bootloader développé par matrixstorm. Il est utilisé sur des processeurs AVR non-USB comme le ATmega328P, qui fonctionne grâce à V-USB.
Pour vérifier la compatibilité avec le booloader USBasploader, vérifiez que ce bloc est présent dans votre fichier `rules.mk`:
Pour vérifier la compatibilité avec le booloader USBasploader, vérifiez que ce bloc est présent dans votre fichier `rules.mk`:
```make
# Bootloader selection
@@ -156,24 +156,24 @@ Pour vérifier la compatibilité avec le booloader USBasploader, vérifiez que c
1. Pressez la touche du keycode `RESET`, ou reliez le port de boot pendant que RST et GND snt reliés. Cela doit être fait très rapidement.
2. Attendez que l'OS détecte l'appareil.
3. Flasher le fichier .hex.
4. Redémarrez l'appareil en mode «application». Cela peut être fait automatiquement.
4. Redémarrez l'appareil en mode «application». Cela peut être fait automatiquement.
## BootloadHID
BootloadHID est un bootloader pour les microcontrôleurs AVR. L'utilitaire de téleversement ne demande pas de drivers au niveau du kernel et peut être lancé sans installer aucune DLLs.
Pour vérifier la compatibilité avec le bootloader bootloadHID, vérifiez que ce bloc existe dans votre fichier `rules.mk` :
Pour vérifier la compatibilité avec le bootloader bootloadHID, vérifiez que ce bloc existe dans votre fichier `rules.mk` :
```make
# Bootloader selection
@@ -187,50 +187,50 @@ Pour vérifier la compatibilité avec le bootloader bootloadHID, vérifiez que c
BOOTLOADER= bootloadHID
```
Utilitaires de flash compatibles:
Utilitaires de flash compatibles:
* [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash) (Utilitaire avec interface graphique recommandé)
* [bootloadhid Command Line](https://www.obdev.at/products/vusb/bootloadhid.html) / `:BootloadHID` avec QMK (utilitaire en ligne de commande recommandé)
Séquence de flash
1. Entrez dans le bootloader en utilisant l'une de ces méthodes:
1. Entrez dans le bootloader en utilisant l'une de ces méthodes:
* Pressez la touche du keycode `RESET` (Cela ne fonctionnera pas sur certains appareils).
* Verrouillez la touche «Salt» tout en branchant le clavier (Généralement ce principe est documenté dans le fichier readme du clavier)
* Verrouillez la touche «Salt» tout en branchant le clavier (Généralement ce principe est documenté dans le fichier readme du clavier)
2. Attendez que l'OS détecte l'appareil.
3. Flasher le fichier .hex.
4. Redémarrez l'appareil en mode «application». Cela peut être fait automatiquement.
4. Redémarrez l'appareil en mode «application». Cela peut être fait automatiquement.
Ou alors:
Ou alors:
make <keyboard>:<keymap>:bootloadHID
## STM32
Tous les processeurs STM32 contiennent un bootloader installé en usine qui ne peut pas être modifié ou supprimé. Certains processeurs STM32 ont des bootloaders qui ne peuvent pas être programmés par USB (ex:STM32F103) mais le processus reste le même.
Tous les processeurs STM32 contiennent un bootloader installé en usine qui ne peut pas être modifié ou supprimé. Certains processeurs STM32 ont des bootloaders qui ne peuvent pas être programmés par USB (ex: STM32F103) mais le processus reste le même.
Pour le moment, aucune variable `BOOTLOADER` n'est nécessaire dans le fichier `rules.mk`.
* [dfu-util](https://github.com/Stefan-Schmidt/dfu-util) / `:dfu-util` (utilitaire en ligne de commande recommandé)
Séquence pour flasher:
1. Entrez dans le bootloader en utilisant l'une de ces méthodes:
1. Entrez dans le bootloader en utilisant l'une de ces méthodes:
* Utilisez une touche sur laquelle le keycode `RESET` (Cela peut ne pas fonctionner sur les appareils STM32F042)
* Si un circuit de réinitialisation (Reset) est présent alors utilisé le bouton qui lui est dédié.
* Autrement, vous devez réaliser une liaison entre BOOT0 et VCC (en appuyant sur le bouton ou à l'aide d'un pont) puis faire un pont entre RESET et GND et enfin relacher le pont BOOT0.
2. Attendre que l'os détecte l'appareil.
3. Flasher un fichier `.bin`.h
* Vous allez recevoir un avertissement à propos de la signature DFU. Ignorez-la.
4. Réinitialisez l'appareil en mode «application». Cela peut être fait automatiquement.
* Si vous êtes en train de travailler en ligne de commande, par exemple avec un `make planck/rev6:default:dfu-util` alors soyez bien sur que l'argument `:leave` est passé aux arguments DFU grâce à la variable `DFU_ARGS` à l'intérieur de votre fichier `rules.mk` (Ex:`DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) afin que votre appareil redémarre après avoir été flashé.
4. Réinitialisez l'appareil en mode «application». Cela peut être fait automatiquement.
* Si vous êtes en train de travailler en ligne de commande, par exemple avec un `make planck/rev6:default:dfu-util` alors soyez bien sur que l'argument `:leave` est passé aux arguments DFU grâce à la variable `DFU_ARGS` à l'intérieur de votre fichier `rules.mk` (Ex: `DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) afin que votre appareil redémarre après avoir été flashé.
### Commandes STM32
Il y a différentes commandes que vous pouvez utiliser pour flasher un firmware dans un appareil STM32:
Il y a différentes commandes que vous pouvez utiliser pour flasher un firmware dans un appareil STM32:
*`:dfu-util` - C'est l'option standard pour flasher un appareil STM32. Le script attendra qu'un bootloader STM32 soit présent.
*`:dfu-util-split-left` - Permet de flasher un firmware normalement, tout comme l'option précédente mais permet de configurer le côté gauche des paramètres EEPROM sur un clavier scindé.
@@ -88,7 +88,7 @@ Par exemple, si votre keymap s'appelle "xyverz" et que vous fabriquez une keymap
La commande va vérifier la configuration du clavier, puis tentera de le flasher en fonction du bootloader (chargeur d’amorçage) spécifié. Cela signifie que vous n'avez pas besoin de savoir quel bootloader votre clavier utilise. Exécutez simplement la commande et laissez-le faire le gros du travail.
Cependant, tout dépend du bootloader qui est installé sur le clavier. Si cette information n’est pas configurée ou si vous tentez de flasher un clavier qui ne permet pas d’être flashé alors vous obtiendrez cette erreur:
Cependant, tout dépend du bootloader qui est installé sur le clavier. Si cette information n’est pas configurée ou si vous tentez de flasher un clavier qui ne permet pas d’être flashé alors vous obtiendrez cette erreur:
WARNING: This board's bootloader is not specified or is not supported by the ":flash" target at this time.
@@ -326,7 +326,7 @@ Il y aun certain nombre de commandes du DFU que vous pouvez utiliser pour flash
### BootloadHID
Pour les claviers basés sur Bootmapper Client(BMC)/bootloadHID/ATmega32A, si vous êtes prêts à compiler et flasher le firmware, ouvrez votre fenêtre de terminal et lancez la commande suivante:
Pour les claviers basés sur Bootmapper Client(BMC)/bootloadHID/ATmega32A, si vous êtes prêts à compiler et flasher le firmware, ouvrez votre fenêtre de terminal et lancez la commande suivante:
make <my_keyboard>:<my_keymap>:bootloaderHID
@@ -351,7 +351,7 @@ Error opening HIDBoot device: The specified device was not found
Trying again in 5s.
```
Une fois ce résultat obtenu, réinitialisez le contrôleur. Le résultat suivant devrait s’afficher:
Une fois ce résultat obtenu, réinitialisez le contrôleur. Le résultat suivant devrait s’afficher:
Linux では、ブートローダデバイスと通信するには適切な権限が必要です。ファームウェアを書き込む時に `sudo` を使うか(非推奨)、`/etc/udev/rules.d/` に[このファイル](https://github.com/qmk/qmk_firmware/tree/master/util/udev/50-qmk.rules)を配置することで、通信することができます。
### Alt + Tab の代わりの Alt + Escape :id=alt-escape-for-alt-tab
左 Alt と `KC_ESC` が押されたときに、アプリ切り替えの(左 Alt と) `KC_TAB` のように振る舞うことを実現する単純な例です。この例は、左 Alt だけがアクティブになっているかを厳格に確認します。つまり、Alt+Shift+Esc によるアプリの逆順での切り替えはできません。また、この例は、実際の Alt+Escape キーボードショートカットを起動することはできなくなりますが、AltGr+Escape キーボードショートカットを起動することはできることに留意してください。
*`make VERBOSE_AS_CMD=yes` - -v オプションを指定して as コマンドを実行します。
*`make VERBOSE_C_CMD=<c_source_file>` - 指定された C ソースファイルをコンパイルするときに -v オプションを追加します。
*`make DUMP_C_MACROS=<c_source_file>` - 指定された C ソースファイルをコンパイルするときにプリプロセッサマクロをダンプします。
*`make DUMP_C_MACROS=<c_source_file> > <logfile>` - 指定された C ソースファイルをコンパイルするときにプリプロセッサマクロを `<logfile>` にダンプします。
*`make VERBOSE_C_INCLUDE=<c_source_file>` - 指定された C ソースファイルをコンパイルするときにインクルードされるファイル名をダンプします。
*`make VERBOSE_C_INCLUDE=<c_source_file> 2> <logfile>` - 指定された C ソースファイルをコンパイルするときにインクルードされるファイル名を `<logfile>` にダンプします。
make コマンド自体にもいくつかの追加オプションがあります。詳細は `make --help` を入力してください。最も有用なのはおそらく `-jx` です。これは複数の CPU を使ってコンパイルしたいことを指定し、`x` は使用したい CPU の数を表します。設定すると、特に多くのキーボード/キーマップをコンパイルしている場合は、コンパイル時間を大幅に短縮することができます。通常は、コンパイル中に他の作業を行うための余裕をもたせるために、持っている CPU の数より1つ少ない値に設定します。全てのオペレーティングシステムと make バージョンがオプションをサポートしているわけではないことに注意してください。
@@ -104,7 +120,7 @@ make コマンド自体にもいくつかの追加オプションがあります
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.