* Eliminate separate slave loop
Both master and slave run the standard keyboard_task main loop now.
* Refactor i2c/serial specific code
Simplify some of the preprocessor mess by using common function names.
* Fix missing #endif
* Move direct pin mapping support from miniaxe to split_common
For boards with more pins than sense--sorry, switches.
* Reordering and reformatting only
* Don't run matrix_scan_quantum on slave side
* Clean up the offset/slaveOffset calculations
* Cut undebounced matrix size in half
* Refactor debouncing
* Minor fixups
* Split split_common transport and debounce code into their own files
Can now be replaced with custom versions per keyboard using
CUSTOM_TRANSPORT = yes and CUSTOM_DEBOUNCE = yes
* Refactor debounce for non-split keyboards too
* Update handwired/xealous to build using new split_common
* Fix debounce breaking basic test
* Dodgy method to allow a split kb to only include one of i2c/serial
SPLIT_TRANSPORT = serial or SPLIT_TRANSPORT = i2c will include only
that driver code in the binary.
SPLIT_TRANSPORT = custom (or anything else) will include neither, the
keyboard must supply it's own code
if SPLIT_TRANSPORT is not defined then the original behaviour (include
both avr i2c and serial code) is maintained.
This could be better but it would require explicitly updating all the
existing split keyboards.
* Enable LTO to get lets_split/sockets under the line
* Add docs for SPLIT_TRANSPORT, CUSTOM_MATRIX, CUSTOM_DEBOUNCE
* Remove avr-specific sei() from split matrix_setup
Not needed now that slave doesn't have a separate main loop.
Both sides (on avr) call sei() in lufa's main() after exiting
keyboard_setup().
* Fix QUANTUM_LIB_SRC references and simplify SPLIT_TRANSPORT.
* Add comments and fix formatting.
* Check the size of the SET_REPORT packet
If we have two bytes, that probably means the first is a report ID. The 6KRO interface may or may not have one, but the NKRO interface always does, so we need to check this regardless of whether KEYBOARD_SHARED_EP is defined.
* Fix indentation
Microsecond (us) delays are now handled by a busy wait loop according to MCU frequency. This replaces the system counter method which had an overhead of around 12us.
TC5 device and supporting routines removed as it was the old us delay counter.
wait_ms is now properly a macro to CLK_delay_ms.
wait_us is now properly a macro to CLK_delay_us.
Removed CLK_get_us as it has no use.
All calls to CLK_get_ms() have been replaced by timer_read64() with corrected typing.
All calls to CLK_delay_ms() have been replaced by wait_ms().
All calls to CLK_delay_us() have been replaced by wait_us() and timings verified or updated as needed after review on scope.
Corrected typing of variables using 64bit ms timer readings if needed.
* initial commit, this now mostly works
- RGB controls work
- Dynamic keymap still broken due to eeprom
- Via works
* STM32 eeprom update
- Update EEPROM emulation library to handle 8bit data like AVR.
- This library also allows for multiple page pairs resulting in greater EEPROM size flexibility
* hs60 changes
* HS60 hhkb added
* Update keyboards/hs60/v2/config.h
Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
* Keep pressed keys on layer state change
* Add doc comment for clear_keyboard_but_mods_and_keys
* Keep pressed keys only if PREVENT_STUCK_MODIFIERS is on
* Check STRICT_LAYER_RELEASE instead of PREVENT_STUCK_MODIFIERS
* add temporary compile test shell script
* Extended support of SKIP_VERSION to make invariant compile results during testing.
* build_keyboard.mk, tmk_core/rules.mk: add LIB_SRC, QUANTUM_LIB_SRC support
Support compiled object enclosed in library.
e.g.
```
LIB_SRC += xxxx.c
xxxx.c --> xxxx.o ---> xxxx.a
```
* remove 'ifdef/ifndef USE_I2C' from quantum/split_common/{i2c|serial}.c
* add SKIP_DEBUG_INFO into tmk_core/rules.mk
When SKIP_DEBUG_INFO=yes is specified, do not use the -g option at compile time.
* tmk_core/rules.mk: Library object need -fno-lto
* add SKIP_DEBUG_INFO=yes
* remove temporary compile test shell script
* add '#define SOFT_SERIAL_PIN D0' to keyboards/lets_split/rev?/config.h
* quantum/split_common/serial.c: Changed not to use USE_I2C.
* Add delay in Tap Code to avoid issues
I think a few people have reporting issues with it working properly, and it may be a timing issue. The 'register_code' uses this sort of delay in some of the functions, and
this is probably why.
Adding the 100ms delay should hopefully fix any issues with it.
* Make tap_code delay configurable
* Update documentation
* Bring tap_code16 inline with changes
* Fix type for tap_code16
Bad copy-paste job
* Just use the value check for the define
* Clarify timing in docs
Co-Authored-By: drashna <drashna@live.com>
* Wordsmithing
Co-Authored-By: drashna <drashna@live.com>
* Add standard ALGR defition, remove (re)definitions from language files
* Use ALGR(kc) consistently in ALTGR(kc) aliases
* Non-Nordic keymaps should not use NO_ALGR
* Add standard KC_ALGR definition
* Update docs with ALGR and KC_ALGR
* Update SS_ALGR and ALGR_T aliases
MCU Pins for debugging, LED, boot tracing, and shift registers are now configurable at keyboard level.
Macros led_* replaced by DBG_LED_*
Macros m15_* replaced by DBG_1_*
Macros m27_* replaced by DBG_2_*
Macros m28_* replaced by DBG_3_*
For CTRL and ALT keyboards, debug boot tracing pin default now set to pad M27 instead of M28 since although M28 is not being used, it is technically a signal for USB port detection.
m15_print(...) renamed to dbg_print(...) to get away from hard coded port names.
dbg_print function now follows similar pattern to debug led output.
* Add initial support for vertically-oriented animations
* DRY up vertical animation support
* Fix animation code for arm_atsam led_matrix to work in all directions
* Adjust py calculation to base off bottom rather than top
* add initial support for hadron ver3
* add initial support for hadron ver3
* pull qwiic support for micro_led to be modified for use in hadron's 64x24 ssd1306 oled display
* initial work on OLED using qwiic driver
* early work to get 128x32 oled working by redefining qwiic micro oled parameters. Currently working, but would affect qwiic's micro oled functionality
* moved oled defines to config.h and added ifndef to micro_oled driver
* WORKING :D - note, still work in progress to get the start location correct on the 128x32 display.
* added equation to automatically calculate display offset based on screen width
* adding time-out timer to oled display
* changed read lock staus via read_led_state
* lock indications fixes
* Added scroll lock indication to oled
* add support for DRV2605 haptic driver
* Improve readabiity of DRV2605 driver.
-added typedef for waveform library
-added unions for registers
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Update keyboards/hadron/ver2/keymaps/default/config.h
Co-Authored-By: ishtob <ishtob@gmail.com>
* Fixes for PR
* PR fixes
* fix old persistent layer function to use new set_single_persistent_default_layer
* fix issues with changing makefile defines that broken per-key haptic pulse
* Comment fixes
* Add definable parameter and auto-calibration based on motor choice
* Unify multiple HID interfaces into one
This reduces the number of USB endpoints required, which frees them up
for other things.
NKRO and EXTRAKEY always use the shared endpoint.
By default, MOUSEKEY also uses it. This means it won't work as a Boot
Procotol mouse in some BIOSes, etc. If you really think your
keyboard needs to work as a mouse in your BIOS, set
MOUSE_SHARED_EP = no in your rules.mk.
By default, the core keyboard does not use the shared endpoint, as not
all BIOSes are standards compliant and that's one place you don't want
to find out your keyboard doesn't work.. If you are really confident,
you can set KEYBOARD_SHARED_EP = yes to use the shared endpoint here
too.
* unify endpoints: ChibiOS protocol implementation
* fixup: missing #ifdef EXTRAKEY_ENABLEs
broke build on AVR with EXTRAKEY disabled
* endpoints: restore error when too many endpoints required
* lufa: wait up to 10ms to send keyboard input
This avoids packets being dropped when two reports are sent in quick
succession (eg. releasing a dual role key).
* endpoints: fix compile on ARM_ATSAM
* endpoint: ARM_ATSAM fixes
No longer use wrong or unexpected endpoint IDs
* endpoints: accommodate VUSB protocol
V-USB has its own, understandably simple ideas about the report formats.
It already blasts the mouse and extrakeys through one endpoint with
report IDs. We just stay out of its way.
* endpoints: document new endpoint configuration options
* endpoints: respect keyboard_report->mods in NKRO
The caller(s) of host_keyboard_send expect to be able to just drop
modifiers in the mods field and not worry about whether NKRO is in use.
This is a good thing. So we just shift it over if needs be.
* endpoints: report.c: update for new keyboard_report format
* add functions to set specific backlight state
* add function to query backlight state
* update documentation with new backlight functions
* Update tmk_core/common/backlight.c
Co-Authored-By: codyd51 <phillip.ennen@gmail.com>
* Update tmk_core/common/backlight.h
Co-Authored-By: codyd51 <phillip.ennen@gmail.com>
* update docs for is_backlight_enabled() name change
Rewrote USB state tracking for implementation of suspend state.
Updated suspend.c in entirety.
Main subtasks (generally hardware related) are now run prior to keyboard task.
* add computed pins from mcu type
* update for atmega32a
* doc typo
* add atmega16 chips, link to references
* remove avr include from config
* exclude assembler in config.h includes
* consolodate options, add 646
* fix typo in pindef
* Preliminary additon of bootmagic lite functionality
* Cleanup code
* Clean up bootmagic code
* Add documentation and clean up code
* Make 'lite' an option for BOOTMAGIC_ENABLE
* Update Templates with note about Bootmagic Lite option
* Detect Debounce variable
* Make sure debounce is a non-zero number
* Capitalize Bootmagic
* Capitalize bootmagic
* Update wording
* Re-add EEPROM reset, by popular demand
And add eeprom-less version to drashna userspace for his sanity
* Fix spacing
* Set BOOTMAGIC_ENABLE to use full/lite/off
And default yes to "full" for compatibility
* Add Bootmagic lite info to templates
* Remove text from makefiles
* Cleanup of makefile
* mention yes in bootmagic docs
* Wordsmitthing the docs
* Fix white spaces
* Readd default bootmagic setting, because it's necessary
* Made DZ60 layout with calculator
* Cleaned up and commented, preparing to fix bug with negative in front of open parenthesis as first character
* Fixed bug where negative sign infront of parenthesis as first character was parsed incorrectly
* Made a better solution for the bug from the previous commit
* Modularized and added a userfile so that this code can be used on various keyboards, found in doogle999
* Removed commented code from keymap
* Made the layer that is used for calculations a define so that it can be changed per keyboard
* Made the readme
* Made the readme in the correct place
* Revert "Made the readme in the correct place"
This reverts commit 7f8b59ed9e59c77401a48be3a7ac1e8fd8e84e32.
* Manually synced with qmk upstream
* Stopped repeat, made keys print character that they are defined as rather than what the keyboard wants them to do
* Added support for numpad, might make all keycodes custom so that there is no need to change doogle999.c if you want to change the keycode that is associated with a function, also made numpad automatically activating an option
* Fixed some bugs with backspacing, updated the readme
* Fixed some bugs with numlock turning on at the wrong times when a shift key was down
* Made the return to layer work automatically instead of just forcing it to layer 0
* fixes and style changes, 20% decreased binary size
* Fixed some bugs with double printing and compilation errors on my side
* Fixed bug with exceeding the buffer size
* Removed changes that added const-ness
* Made changes so that backspace does not repeat to remove backspace bugs, still some bugs with recalculating without having typed anything
* Fixed obo error with calc main loop
* Made includes more accurate in keymap for dz60
* Moved flags to user makefile
* Converter: add XT USB converter from TMK
* Converter: port TMK code for USB converter to QMK
* Apply requested changes after code review by @drashna
- use "pragma once" instead of include guards
- use LAYOUT instead of KEYMAP
- allow customisation with matrix_init_user() and matrix_scan_user()
- set BOOTLOADER instead of BOOTLOADER_SIZE
- Add XT_ENABLE to OPT_DEFS
* Remove unnecessary lines
Added hid_listen USB device for arm_atsam USB protocol.
Debug printing is now done through the console device (CONSOLE_ENABLE = yes) rather than the virtser device, for viewing in hid_listen.
Function dpf(...) renamed to CDC_printf(...) and should now be called directly if intending to print to the virtual serial device.
* Add Function level EEPROM configuration
Add kb and user functions for EEPROM, and example of how to use it.
* Bug fixes and demo
* Additional cleanup
* Add EEPROM reset macro to example
* Forgot init function in list
* Move eeconfig_init_quantum function to quantum.c and actually set default layer
* See if removing weak quantum function fixes issue
* Fix travis compile error
* Remove ifdef blocks from EECONFIG so settings are always set
* Fix for ARM EEPROM updates
* Fix merge issues
* Fix potential STM32 EEPROM issues
* Update for SEND_STRING usage
Update for SEND_STRING usage.
Sending keyboard reports (kbd, nkro) now obey the minimum polling time.
While attempting to send a keyboard report and waiting for a USB poll, other functions of the keyboard, including LED effects and power management, will continue to operate at their intended intervals.
* Updates for send string, syscalls, stdio, debug prints, auto shift
Now properly waiting for previous keys sent over USB to complete before sending new.
Added heap to linker and now compiling with syscalls support.
Removed custom string functions and now using stdio.
dprintf now works as intended through virtser device.
* CTRL and ALT keymap updates
CTRL mac keymap updated
ALT default and mac keymap updated
ALT rules.mk added Auto Shift with default no
* Code cleanup as per discussion with vomindoraan
Code cleanup as per discussion with vomindoraan
* add 'mavrdude' target into tmk_core/avr.mk
I made it a little convenient when writing the same binary to multiple Pro Micro.
* rename target name 'mavrdude' to 'avrdude-loop'
* modify docs/flashing.md about avrdude-loop
* mdify docs/flashing.md again
* modifi docs/flashing.md 3rd
* Remove chording as it is not documented, not used, and needs work.
* Make Leader Key an optional feature.
* Switch from `PREVENT_STUCK_MODIFIERS` to `STRICT_LAYER_RELEASE`
* Remove `#define PREVENT_STUCK_MODIFIERS` from keymaps.
* Initial version of zeal60
* WIP
* Fixes issue #900
* Adding RGB underglow functionality.
Fixed a compile-time conflict caused by enabling RGB underglow functionality.
* Refactor RPC protocol
* Fix last merge
* README for RGB underglow updated.
* Additional README changes.
* Adding RGBW strip software-based current-limiting functionality.
* RGBW current-limiting functionality should be handled by RGBSTRIP_MAX_CURRENT_PER_LIGHT instead.
* Updated README to reflect implementation of built-in current limiting.
* Keymap readability improvements.
* Minor keymap improvements.
* Fixed LED driver init sequence, formatting
* Dimming implementation tested, working.
* Stab LEDs synced with spacebar hits in effects.
* RGB underglow tested and functional. Simplified README for RGB underglow.
* Undid accidental file deletion from previous merge conflict. Safer values for RGB underglow.
* Improved arrow key positions in keymap.
* Added functionality to correct uneven RGB underglow. Refactored related code.
* Reverted to safer values for underglow.
* Changes for v0.3
* Custom LED brightness scaling will take place after current adjustment in order to avoid being overridden.
* Create keymap.c
Added split backspace and split shift to ISO layout
* Create config.h
Turned on LEDs for new layout
* Fixed bug where left spacebar stabilizer LED (LC06) would adopt color of row above.
* Added hhkb_wilba keymap
* Update keymap.c
* Update keymap.c
* Update keymap.c
* Added indicators, full param setting via host
* Added "mousekey" layout
* Added Zeal65 support, factory test mode
* Keycode safe range changed, caused bugs
* Bumped EEPROM version due to change in QMK keycodes
* Disable HHKB "blocked" LEDs if KC_NO in keymap
* Added "disable_hhkb_blocker_leds"
* Required overridden function for keymaps in EEPROM
* Added polar coordinate mapping, effect speed
* Force Raw HID interface number to 1 always
* Fixed last merge from master
* Added effect speed to default keymaps
* add BACKLIGHT_ prefix to vars
* add BACKLIGHT_ prefix to vars
* Keymap speed effect; keymap improvements/fixes
Readme updated to match changes
* Refactored to use common IS31FL3731/I2C drivers
* Fixed make rules, backlight disabled feature
* Make split rightshift default for Zeal65
* Added M60-A as a "version" of Zeal60.
* Renamed IS31FL3731 driver functions
* Fix suspend_wakeup_init_kb() being defined twice
* First pass refactor dynamic keymaps
* Updated to changed I2C and ISSI drivers
* Refactor zeal_color.* usage to quantum/color.*
* Updated Zeal65, fixed dynamic_keymap
* Major refactoring of Zeal60 backlight and API
* Lots of little cleanups
* Added readme.md
* Added readme.md
* Added LAYOUT_60*() macros, refactored and cleaned up default keymaps
* Fix compile error in suspend.c
* Added Zeal65 LAYOUT macros, info.json
* Added rama/m60_a, deleted zeal60/keymaps/m60_a
* Fixed rama/m60_a/keymaps/proto
* Fixed compilation error for suspend.c
* Requested changes for PR
* Fixed readme.md images
* Another readme.md fix
* Added drashna's requested changes
* add temporary test code rgblight-macro-test1.[ch]
* rgblight.h : mode auto numberring and auto generate mode name symbol
No change in build result.
* rgblight.c use RGBLIGHT_MODE_xxx symbols
No change in build result.
* quantum.c use RGBLIGHT_MODE_xxx symbols
No change in build result.
* fix build break. when RGB_MATRIX_ENABLE defined
* add temporary test code rgblight-macro-test2.[ch]
* modify rgblight_mode_eeprom_helper() and rgblight_sethsv_eeprom_helper()
* modify rgblight_task()
* configurable each effect compile on/off in config.h
* update docs/feature_rgblight.md
* fix conflict. docs/feature_rgblight.md
* remove temporary test code rgblight-macro-test*.[ch]
* fix comment typo.
* remove old mode number from comment
* update docs/feature_rgblight.md about effect mode
* Revert "update docs/feature_rgblight.md about effect mode"
This reverts commit 43890663fcc9dda1899df7a37d382fc38b1a6d6d.
* some change docs/feature_rgblight.md
* fix typo
* docs/feature_rgblight.md update: revise mode number table
* ALT keymap update
Added additional End key on layer 1 to match key cap
* LED driver update addressing PR #3871
Update sync between IS31FL3733 drivers is causing varying behavior in keyboards including brightness mismatch and slight flicker at very low rgb values. Visually, disabling sync is not noticeable. Ref PR #3871 by guarnacciaa.
Appearenly, teensy controllers have some issues with waking up. If the rgblight is called "too soon", it will cause the controller to lock up, intermittently. Adding a 10 ms
delay seems to fix this issue, as it lets it have enough time to handle things properly.
This has been tested extensively on my Ergodox EZ, and can be seen in the @drashna userspace, under the "suspend_wakeup_init_user" function.
Added support to enter bootloader from software (bootloader version must be newer than "v2.18Jun 22 2018 17:28:08" until workaround for older is created).
Updated CTRL and ALT keymaps for entering bootloader with Fn+b held for >500ms.
Added basic MacOS keymap for ALT.
USB sleep LED indicator now turns off after 1 second.
Slowed down debug LED code printing.
- Added support for NO_USB_STARTUP_CHECK. This allows the keyboard do function and not get stuck in a SUSPENDED state loop in case of no USB connection.
- Added support for WAIT_FOR_USB. In LUFA no keyboard has this flag enable therefor no keyboard waits for usb to be active.
- Added documentation for both configuration flags as they were missing.
Renamed keyboard alt67 to alt and adjusted necessary files where alt67 appeared.
CTRL keymap fixed enum structure name.
usb2422 removed stray define no longer used.
* STM32 EEPROM Emulation
- Added EEPROM emulation libaries from libmaple and Arduino_STM32. https://github.com/rogerclarkmelbourne/Arduino_STM32 and https://github.com/leaflabs/libmaple.
- Renamed teensy EEPROM library and added conditional selection of library.
- Remapped EEPROM memory map for 16 byte blocks (as is with STM32f3xx MCUs).
- Added EEPROM initialization in main.c of Chibios.
- Added EEPROM format to clear the emulated pages when EEPROM is marked as invalid.
* Fixed ifdef
* Massdrop SAMD51
Massdrop SAMD51 keyboards initial project upload
* Removing relocated files
Removing files that were relocated and not deleted from previous location
* LED queue fix and cleaning
Cleaned some white space or comments.
Fix for LED I2C command queue.
Cleaned up interrupts.
Added debug function for printing numbers to scope through m15 line.
* Factory programmed serial usage
Ability to use factory programmed serial in hub and keyboard usb descriptors
* USB serial number and bugfix
Added support for factory programmed serial and usage.
Incorporated bootloader's conditional compiling to align project closer.
Fixed issue when USB device attempted to send before enabled.
General white space and comment cleanup.
* Project cleanup
Cleaned up project in terms of white space, commented code, and unecessary files.
NKRO keyboard is now using correct setreport although KBD was fine to use.
Fixed broken linkage to __xprintf for serial debug statements.
* Fix for extra keys
Fixed possible USB hang on extra keys report set missing
* I2C cleanup
I2C cleanup and file renames necessary for master branch merge
* Boot tracing and clocks cleanup
Added optional boot debug trace mode through debug LED codes.
General clock code cleanup.
* Relocate ARM/Atmel headers
Moved ARM/Atmel header folder from drivers to lib and made necessary makefile changes.
* Pull request changes
Pull request changes
* Keymap and compile flag fix
Keymap fix for momentary layer.
Potential compile flag fix for Travis CI failure.
* va_list include fix
Fix for va_list compile failure
* Include file case fixes
Fixes for include files with incorrect case
* ctrl and alt67 keyboard readme
Added ctrl and alt67 keyboard readme files
* initial files for rev 6 with encoder
* music map init, dip scan added
* adds ws2812 driver for arm
* flesh out dip and encoder support
* adds default encoder res
* adds default encoder res
* start muse implementation
* muse working with encoder as control
* flip direction
* try mouse wheel again
* dont break other revs
* dont break other revs
* conditional autio
* pwm ws driver (not working)
* update build includes for chibios
* update ws2812 driver/config
* last commit for glasser code
* working example
* remove rgb for now
* finish up rev6
* working encoder keycodes
* add warnings to planck keymaps about the LAYOUT
* integrated Peter Fleury's LCD library for HD44780 LCDs
* fixed typo
* cleanup finished
* add documentation
* added HD44780 documentation
* removed keyboard from .gitmodules
* resolved merge conflict
* removed edit of kira75s rules.mk made by merge
* moved hd44780 to drivers/avr
* Added licence info to hd44780 files
* Added link to hd44780 docs.
* Added Modular keyboards L,R and NUM
Created code modules for the 3 modules of the modular keyboard.
Original idea by MechboardsUK. Uses i2c implementation similar to lets
split
* Remove modular from master
This is to fix incorrect branching
* fixed bootloader makefile
- Echo -e does not behave coorectly on mac
- Replaced with equivilant printf statements
* quick typo fix
* Add suspend functions
* Disable RGB code if it's disabled
* Add suspend code to ChibiOS for future compatibility
* Add keyboard_init functions
* Change where references so it will compile
* Wrong command chained in wake up kb function
* Fix non-feature file changes
* Add documentation
* Re-add matrix init docs
* add rgblight code to example
* Remove keyboard init stuff for separate PR
* And and fix _noeeprom functions to many of the RGB Underglow functions
* Many functions are unnecessarily calling the eeprom write code. The toggle/enable is command is especially guilty of this, as it writes to EEPROM 3 times. But rgb mode writes twice, every time it's called. And init resets the rgb eeprom range and then writes back to it twice!
* Fixed the rgblight_sethsv_noeeprom to work as expected, by moving a lot of the code to a helper function.
* Added a noeeprom function for mode, enable, disable, and toggle functions. (didn't bother for increase/decrease stuff, and didn't add new keycodes)
* Add to predefined colors list
* Add new functions to manual/docs
* Update RGB Sleep feature to use _noeeprom
Because that's exactly what it should be doing, actually!
* Fix dead link to USB keycodes doc
Link was dead and the fresher version I could find on usb.org is still older than this one.
Thus, WaybackMachine seems the best option.
* Fix dead link to USB keycodes doc, with 2 options
Give the WaybackMachine link (fresher and for reference of the content of the original link) and the usb.org one (older)
Many a times one would want to use multiple modifiers with the same key,
preferably without having to hold anything, like `Ctrl+Shift+C` or
`Ctrl+Shift+V` to copy/paste in GNOME Terminal. To make this possible, we need
to be able to chain one-shot modifiers, so that we can have multiple of them
active at the same time.
The easiest way to accomplish this is that whenever we activate a one-shot
modifier, we apply it on top of the existing set, instead of re-setting the
state. When deactivating, either due to an interrupt, or due to a timeout, we
deactivate all oneshots anyway, so the clearing part is covered. When we turn
the one-shot modifier into a toggle, that will also clear all one-shot modifiers
first, so we covered that case too.
Fixes#2796, #1580, and #856.
Signed-off-by: Gergely Nagy <qmk@gergo.csillger.hu>
* Copy Chibios serial_usb_driver into the chibios/protocol
It's renamed to usb_driver to avoid name conflicts
* Make the usb driver compile
* Disable ChibiOS serial usb driver for all keyboards
* Change usb_main to use QMKUSBDriver
* Initialize the usb driver buffers
* Add support for fixed size queues
* Fix USB driver initialization
* Don't transfer an empty packet for fixed size streams
This finishes fixing #2314, which mostly copies the firmware when compiling.
However, it misses `:teensy`, `:avrdude` and most importantly, `:production`
* grep -> $(GREP)
Some UNIXy systems (FreeBSD for example) don't use GNU grep by default.
Allow the user to specify which grep implementation to use so that
GNU grep can be specified.
* Allow using versioned avr-gcc command
Don't hardcode "avr-gcc", and allow strings such as "avr-gcc8", or
"avr-gcc-7.3.0" to match checks for "avr-gcc".
* Generate api docs from source code
* Add a bunch of doxygen comments
* more doxygen comments
* Add the in-progress api docs
* script to generate docs from travis
* Add doc generation to the travis job
* make travis_docs.sh commit the work it does
* make sure the docs script exits cleanly
This is an inelegant hack for #2522 but makes things work. Basically we give `action.c` a chance to handle the hold event early so that we can swap the keyboard for later keys. Later, to allow the hold to happen again quickly we nuke the key record so that tapping is reset. I tried to find a cleaner way, honestly.
* Move lufa descriptor to protocol/usb_descriptor
* Try to compile usb_descriptor on ChibiOS
* Add lufa_utils for ChibiOS
Lufa USB descriptors for ChibiOS
* More lufa_util compatibility fixes
* First compiling version of shared USB descriptor
* Send the usb descriptors
* Fix the CONSOLE output on ChibiOS
* Add errors for unsupported interfaces
* Enable support for vitual serial port USB descriptors
* Implement virtual serial port for ChibiOS
* Cleanup the lufa_utils
Use the default lufa header files
* Add raw hid support for ChibiOS
This is completely untested
* Enable midi compilation on ChibiOS
* Move midi functionality out of lufa.c
* Don't register sysex callback when not needed
* ChibiOS compilation fixes
* Update ChibiOS submodule
* Fix the Midi USB descriptor
It didn't work properly when both Midi and Virtual serial port was enabled.
* Add MIDI support for ChibiOS
* Fix USB descriptor strings on ChibiOS
* Use serial usb driver for raw hid
* Generalize the ChibiOS stream like drivers
This makes the initialization much more simple and eliminates a lot of
the code duplication.
* Convert console output to chibios stream driver
* Fixes for ChibiOS update
* Update the ChibiOS contrib submodule
To include the usb data toggle synchronization fixes
* Fix duplicate reset enumeration on ChibiOS
* Add missing include
* Add number of endpoints check for ChibiOS
* Enable serial USB driver on all keyboards
* Add missing includes when API is enabled withot midi
* Add another missing inlcude
* Add NIU Mini keymap from Planck keymap
* Remove old keymap files
* Fix README, removed Planck references
* Add default layout, move Planck layout to separate folder
* Update README
* Add my XD60 keymap
* Change RShift to slash
* Fix keymap: stuck on MO(1)
* Move RESET to Fn+Enter
* Add: RGB saturation cycle
* Add numpad layer to keymap
* Fix last case
* Cleanup Mechmini keymap. Once the custom RGB function is defined, there is no need to manually handle RGB code.
* Change default to KEYMAP_MIT, not KEYMAP_OFFSET
* Add custom RGB code for JJ40
* Reset Mechmini advertised power draw to 500. Will have to test actual maximum power draw later.
* RGB working on JJ40.
* Fix: saturation increase/decrease flipped
* Add new directory for my custom keymap with RGB keycodes
* Swap LAlt and LGUI
* Update JJ40 max power draw with measured value
* Update: fun40 rules.mk to enable underglow; earlier failed Travis CI
* Fix: init RGB LEDs on boot. Also added HHKB-like keymap for XD60.
* Super rudimentary backlight test, init RGB LEDs on boot
* Backlighting works - stays on for now
* Toggling working
* Now can override backlight.c functions. Problem was functions in backlight.c weren't called before due to a lack of matrix_scan_quantum() in matrix.c
* Timers not working
* Delete global.h
* Cleanup
* Compiles
* Good sign: LEDs stop working again
* Handle timer1 overflow
* Progress: fix: forgot to init
* Backlighting fully working now except breathing.
* Revert keymap to original keycodes
* Update XD60 keymap README
* Update JJ40 keymap with backlight toggles
* Breathing working just fine.
* Update references
* Add backlight_set() call
* Cleanup code to disable backlight
* Fix: does not compile
* Fix: missing call to rgblight_task.
* Testing with BACKLIGHT_BREATHING
* Cleanup
* Cleanup comments
* More commenting cleanup.
* Do not enable BACKLIGHT_BREATHING by default
* Update XD60 keymap
* Update: move matrix_scan_kb out from matrix.c to jj40.c (kb-level)
* Cleanup for PR
* Fix conflict in readme.md for NIU mini
* Restore original power consumption figure
* Fix: matrix_scan_user() now has to be defined in the keymaps
* Add weak `matrix_scan_user` so it does not have to be defined in keymap
* Add weak matrix_init_user()
* Cleanup Mechmini keymap. Once the custom RGB function is defined, there is no need to manually handle RGB code.
* Change default to KEYMAP_MIT, not KEYMAP_OFFSET
* Add custom RGB code for JJ40
* Reset Mechmini advertised power draw to 500. Will have to test actual maximum power draw later.
* RGB working on JJ40.
* Fix: saturation increase/decrease flipped
* Add new directory for my custom keymap with RGB keycodes
* Swap LAlt and LGUI
* Update JJ40 max power draw with measured value
* Update: fun40 rules.mk to enable underglow; earlier failed Travis CI
* Fix: init RGB LEDs on boot. Also added HHKB-like keymap for XD60.
* Super rudimentary backlight test, init RGB LEDs on boot
* Backlighting works - stays on for now
* Toggling working
* Now can override backlight.c functions. Problem was functions in backlight.c weren't called before due to a lack of matrix_scan_quantum() in matrix.c
* Timers not working
* Delete global.h
* Cleanup
* Compiles
* Good sign: LEDs stop working again
* Handle timer1 overflow
* Progress: fix: forgot to init
* Backlighting fully working now except breathing.
* Revert keymap to original keycodes
* Update XD60 keymap README
* Update JJ40 keymap with backlight toggles
* Breathing working just fine.
* Update references
* Add backlight_set() call
* Cleanup code to disable backlight
* Fix: does not compile
* Fix: missing call to rgblight_task.
* Testing with BACKLIGHT_BREATHING
* Cleanup
* Cleanup comments
* More commenting cleanup.
* Do not enable BACKLIGHT_BREATHING by default
* add breathing to bananasplit
* backlight breathing overhaul
* fix the backlight_tick thing.
* fix for vision_division backlight
* fix a few keymaps and probably break breathing for some weirdly set-up boards.
* remove BL_x keycodes because they made unreasonable assumptions
* some fixes for BL keycodes
* integer cie lightness scaling
* use cie lightness for non-breathing backlight and make breathing able to reach true max brightness
* pull fuse settings for bootloader jump
* fix 32a chips
* make automatic bootloader selection optional
* quantify bootloaders
* fixs #164, speeds up dfu reset
* fix for chips w/o usb
* missing an n
* fix bootloader sizes, use words for addresses
* fix bmini, pearl, and [[ issue, make things quiet
* ignore avr errors on arm for now
* update settings for the light
* document bootloader stuff
* add bootloader title
This is particularly relevant for, e.g., the ergodox EZ and
other keyboards with slow scan rates. Without changing the API or
behavior of individual process_record() calls, we allow a
configuration flag to make multiple calls in a single scan.
This will probably have miniscule effects on non-steno users,
and it's not enabled by default for any keyboards. Added note
about it to ergodox README.
Signed-off-by: seebs <seebs@seebs.net>
* adds :bootloader target
* update planck and preonic revisions
* remove references to .h files for planck
* update preonic keymap
* only add keyboard.h files that exist
* add production target
* hook things up with the new lufa variables
* update rules for planck/preonic
* back backlight key turn of status led when pressed
* add manufacturer/product strings to bootloader
avoid the following error when `UNICODEMAP_ENABLE = yes`:
```
quantum/process_keycode/process_unicodemap.c:52:21: error: implicit declaration of function 'pgm_read_dword'
```
* adds .qmk file type as a target
* adds info.json with vendor and product
* add files for qmk info script
* add layout file for planck
* ignore .qmk files
* more settings
* update rules for avr and chibios
* update .qmk generation for info.json and inheritence
* add RETRO_TAP: tap anyway, even after TAP_TERM, if no interruption
* consistent variable name
* add option doc
* change name for consistency
* make RETRO_TAPPING default to off
* redo make args to use colons, better folder structuring system [skip ci]
* don't put spaces after statements - hard lessons in makefile development
* fix-up some other rules.mk
* give travis a chance
* reset KEYMAPS variable
* start converting keyboards to new system
* try making all with travis
* redo make args to use colons, better folder structuring system [skip ci]
* don't put spaces after statements - hard lessons in makefile development
* fix-up some other rules.mk
* give travis a chance
* reset KEYMAPS variable
* start converting keyboards to new system
* try making all with travis
* start to update readmes and keyboards
* look in keyboard directories for board.mk
* update visualizer rules
* fix up some other keyboards/keymaps
* fix arm board ld includes
* fix board rules
* fix up remaining keyboards
* reset layout variable
* reset keyboard_layouts
* fix remainging keymaps/boards
* update readmes, docs
* add note to makefile error
* update readmes
* remove planck keymap warnings
* update references and docs
* test out tarvis build stages
* don't use stages for now
* don't use stages for now
* initial clueboard_60 support
* LED lighting support
* fix the clueboard->clueboard_66 rename
* Add layout support to clueboard_60
* Fix the 60_iso layout so it's actually iso
* add a default keymap for AEK layout
* fix clueboard_17
* Fixup the ISO layouts
* Fix the `wait_ms()/wait_us()` definitions for chibios
* Fix up the wait_ms/wait_us hack. Reduce stack size.
* Add a missing #include "wait.h"
* commit files that should have already been comitted
Updated MiniDox split_util.h and eeprom files to reflect this change.
I recommend adding this to any split board that used these files, my changes will not effect them currently.
This protocol breaks out "duplicate" keys into their own entry in the packet so that more complicated logic can be done on the software side, including support for additional languages and alternative theories.
This introduces a grep dependency, which I believe we didn't have
before, but it should be available and installed by default on all the
supported systems.
* Add 80ms delay for KC_CAPS when used as a tap key
Workaround for the macOS caps lock delay
* Revert "Increase TAPPING_TERM for the Clueboard"
This reverts commit a74e69e9fa.
Refactored Bluetooth support to make adding new Bluetooth modules
easier in the future.
* Remove `OUT_BLE` key from QMK's keymap. `OUT_BT` is all we need now
as there's no difference anymore.
* Made BLUETOOTH_ENABLE build option legacy as not to break existing
keymaps (Falls back to existing EZ Key support if on)
* Removed `ADAFRUIT_BLE_ENABLE` build option
* Created new build option `BLUETOOTH` with module option (Currently
`AdafruitEZKey` & `AdafruitBLE`)
* Moved all LUFA bluetooth key/mouse events under `BLUETOOTH_ENABLE`
ifdef with selected modules output.
The oneshot cancellation code do not depend on the
action_tapping_process and since process_record get called via the
action_tapping_process logic moved the oneshot cancellation code into
the action_exec function just before the action_tapping_process call
A macro key can now be easily set to act as a modifier on hold, and
press a shifted key when tapped. Or to switch layers when held, and
again press a shifted key when tapped.
Various other helper defines have been created which send macros when
the key is pressed, released and tapped, cleaning up the
action_get_macro function inside keymap definitions.
The layer switching macros require a GCC extension - 'compound
statements enclosed within parentheses'. The use of this extension is
already present within the macro subsystem of this project, so its use
in this commit should not cause any additional issues.
MACRO_NONE had to be cast to a (macro_t*) to suppress compiler
warnings within some tapping macros.
Since we can't read the real_mods and oneshot_mods static variable
directly within the update_user_visualizer_state
function (Threading and serial link). We are know storing the mods
states in the visualizer_keyboard_status_t structure. We can now
display the status of the modifier keys on the LCD display.
After setting a ONESHOT_TIMEOUT value, the oneshot layer state would
not expire without an event being triggered (key pressed). The reason
was that in the process_record function we would return priort to
execute the process_action function if it detected a NOEVENT cycle. The
process_action contained the codes to timeout the oneshot layer state.
The codes to clear the oneshot layer state have been move just in
front of where we check for the NOEVENT cycle in the process_record
function.
Fix memory leaks by using stack instead of malloc
Reduce memory usage by having less temporary bufffers
Remove warnings by adding includes
Decrease code size by 608 bytes (mostly due to not linking malloc)
More robust handling of buffer overflows
There are a lot of PS/2 commands, some are vendor/device specific, so we
provide a weak ps2_mouse_init_user() to be implemented in each keyboard
that need it.
There are now 3 potential locations to send HID reports:
1. USB
2. The bluefruit easy key
3. Adafruit BLE
Generally speaking, if USB is connected then we should prefer to
send the reports there; it is generally the best channel for this.
The bluefruit module has no feedback about bluetooth connectivity
so the code must speculatively send reports over both USB and bluetooth.
The BLE module has connectivity feedback. In general we want to
prefer to send HID reports over USB while connected there, even
if BLE is connected. Except that it is convenient to force them
over BLE while testing the implementation.
This policy has been extracted out into a where_to_send function
which returns a bitmask of which of the channels should be used.
This implements some helper functions that allow sending key reports
to an SPI based Bluetooth Low Energy module, such as the Adafruit
Feather 32u4 Bluefruit LE.
There is some plumbing required in lufa.c to enable this; that
is in a follow-on commit.
Adopt the macros for saving/restoring the interrupt state
that are provided by the avr gcc environment.
Removing intialization of the timer value; this shaves off
a few bytes because globals are default initialized to zero.
User print disables the normal print messages in the body of QMK/TMK
code and is meant as a lightweight alternative to NOPRINT. Use it when
you only want to do a spot of debugging but lack flash resources for
allowing all of the codebase to print (and store their wasteful
strings).
This adds an action, `ACTION_SWAP_HANDS`, that swaps the the keys on the keyboard across a keymap-defined hemisphere in order to support one-hand typing without requiring a separate one-handed layer. See updated `doc/keymap.md` for more information.
Instead of `&& false`, explicitly `exit 1` to make the rules using these macros
fail. This fixes#571, and likely breaks Travis badly.
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
Modified the LUFA USB HID Descriptor to change the logical/usage
minimums for System Control from 0x01 (Mouse) to 0x81 (System Power
Down), this fixes OS X recognizing the Planck as having a mouse and
tablet, even with mousekeys off.
The prerequisites at the start of the build process are order-only
so that the trget don't link again. Also added as a dependency to
the compilation to force the messages to be printed at the start
* Modularity and gcc warnings fixes.
* Add ChibiOS support (USB stack + support files).
* Make usb_main more USB_DRIVER #define independent.
* Move chibios to tool.
* Implement jump-to-bootloader.
* Small updates.
* Fix bootloader-jump compiling.
* Move AVR specific sleep_led.c into avr.
* Add basic sleep_led for chibios.
* Update chibios README.
* NKRO fixes.
* Rename some Makefile defines.
* Move STM32 bootloader address config to separate .h file.
* Add ARM Teensies bootloader code.
* Fix chibios/usb_main GET_REPORT handing.
* Add missing #include to keymap.c.
* Make bootmagic.c code portable (_delay_ms -> wait_ms).
* Move declaration of keymap_config.
Should really not declare variables in .h files - since it's included
in different .c files, a proper linker then complains that the same
variable is declared more than once (once for each .c file that the
offending .h is included in).
* Add eeprom support for chibios/kinetis.
* Rename chibios example keyboard.
* Move chibios/cortex selection to local Makefiles.
* Chibios: use WFI in idle. WIP suspend stuff.
* ChibiOS/kinetis: sending remote wakeup.
* ChibiOS/STM32: send remote wakeup.
* Fix report size of boot protocol.
* Fix drop key stroke
Keyboard report should be checked if its transfer finishs successfully.
Otherwise key stroke can be missing when other key event occurs
before the last report transfer is done.
Boot protocol 10ms interval probably causes this problem in case
it receives key events in a row within the period. NKRO protocol
suffers less or nothing due to its interval 1ms.
* Chibios/usb_main: rename a variable for clarity.
* Add correct chibios/bootloader_jump for infinity KB.
* ChibiOS: make reset request more CMSISy.
* Chibios: Add breathing sleep LED on Kinetis MCUs.
* ChibiOS: Update infinity bootloader code to match updated ChibiOS.
* ChibiOS: prettify/document sleep_led code.
* Chibios: Remove the wait in the main loop.
* Add maple mini code.
* Do timeout when writing to CONSOLE EP queue.
Fixes TMK bug #266.
* Chibios: add 'core/protocol' to the makefiles' search path.
* Chibios: Update to new USB API.
* Chibios: add more guards for transmitting (fix a deadlock bug).
* Add update for chibios in README
* Chibios: Fix a HardFault bug (wait after start).
* Chibios: cleanup usb_main code.
* Chibios: Revert common.mk change (fix AVR linking problem).
* core: Fix chibios user compile options
Compile options can be defined in project Makefile such as UDEFS, UADEFS, UINCDIR, ULIBDIR and ULIBS.
* Sysv format for ChibiOS arm-none-eabi-size
Some new patches to ChibiOS puts heap as it's own section. So the
berkeley format is now useless, as the heap will be included in the
BSS report. The sysv format displays the bss size correctly.
* Fix hard-coded path of CHIBIOS
* Add support for new version of ChibiOS and Contrib
The Kinetis support has moved to a separate Contrib repository in
the newest version of Chibios. There has also been some structure
changes. So this adds support for those, while maintaining back-
wards compability.
* Update ChibiOS instructions
* Chibios: implement sleep LED for STM32.
* Chibios: Update the main chibios README.
* Chibios: fix STM32_BOOTLOADER_ADDRESS name.
* Chibios: make the default bootloader_jump redefinable (weak).
* Chibios: disable LTO (link-time optimisation).
With LTO enabled, sometimes things fail for mysterious reasons
(e.g. bootloader jump on WF with LEDs enabled), just because the
linker optimisation is too aggressive.
* Chibios: add default location for chibios-contrib.
* ChibiOS: update mk to match chibios/master.
* ChibiOS: update instructions.md.
* Add chibi_onekey example.
* Add comments to chibi_onekey Makefile.
* Rename some Makefile defines.
* Move STM32 bootloader address config to separate .h file.
* Rename chibios example keyboard.
* Move chibios/cortex selection to local Makefiles.
* Add Teensy LC onekey example.
* Chibios: use WFI in idle. WIP suspend stuff.
* Update chibi/teensy instructions.
* Update chibios/Teensy instructions.
* Add infinity_chibios
* Add keymap_hasu.c
* Infinity_chibios: select correct bootloader_jump.
* Infinity_chibios: improve comments.
* Add generic STM32F103C8T6 example.
* Add maple mini code.
* STM32F103x fixes.
* Add maple mini pinout pic.
* Chibios: updates for 3.0.4 git.
* Chibios: rename example stm32_onekey -> stm32_f072_onekey.
* Chibios: add makefiles for Teensy 3.x examples.
* Chibios: update Teensy 3.x instructions.
* Chibios: Tsy LC is cortex-m0plus.
* Chibios: add more guards for transmitting (fix a deadlock bug).
* Change README for chibios
* Chibios: update examples to current chibios git.
Match the changes in mainline chibios:
- update chconf.h
- update supplied ld scripts structure
- update Teensy instructions (switch to official
chibios and introduce contrib)
* Add ChibiOS and ChibiOS-Contrib submodules
Also fix the makefile path for them.
* Moves chibios keyboards to keyboards folder
* First version of ChibiOS compilation
Only the stm32_f072_onkey keyboard is ported at the moment. It
compiles, but still doesn't link.
* More chibios fixes
It now compiles without warnings and links
* Move the teensy_lc_onekey to the keyboards folder
* Clean up the make file rule structure
* Remove keymap_fn_to_action
* Update more ChibiOS keyboards to QMK
Most of them does not compile at the moment though.
* Use older version of Chibios libraries
The newest ones have problems with compilation
* Remove USB_UNCONFIGURED event
It isn't present in the older version of ChibiOS
* Fix the infinity_chibios compilation
* Fix potentially uninitialized variable
* Add missing include
* Fix the ChibiOS makefile
* Fix some Chibios keyboard compilation
* Revert the rules.mk file back to master version
* Combine the chibios and AVR makefiles
With just the required overrides in the respective platform
specific one.
* Slight makefile restrucuring
Platform specific compiler options
* Move avr specific targets out of the main rules
* Fix ChibiOS objcopy
The ChibiOS objcopy needs different parameters, so the parameters
are moved to the corresponding platform rule file
* Fix the objcopy for real this time
The comands were moved around, so chibios used avr and the ohter
way around.
Also change the objsize output format
* Fix the thumb flags
* Fix the infinity hasu keymap
* Per platform cpp flags
* Add gcc-arm-none-eabi package to travis
* Add arm-none-eabi-newlib to travis
* Fix the name of the libnewlib-arm-none-eabi lib
* Fix the ChibiOS paths
So that they are properly relative, and builds don't generate
extra folders
* Fix the board path of stm32_f103_onekey
* Only consider folders with Makefiles as subproject
* non-working commit
* working
* subprojects implemented for planck
* pass a subproject variable through to c
* consolidates clueboard revisions
* thanks for letting me know about conflicts..
* turn off audio for yang's
* corrects starting paths for subprojects
* messing around with travis
* semicolon
* travis script
* travis script
* script for travis
* correct directory (probably), amend files to commit
* remove origin before adding
* git pull, correct syntax
* git checkout
* git pull origin branch
* where are we?
* where are we?
* merging
* force things to happen
* adds commit message, adds add
* rebase, no commit message
* rebase branch
* idk!
* try just pull
* fetch - merge
* specify repo branch
* checkout
* goddammit
* merge? idk
* pls
* after all
* don't split up keyboards
* syntax
* adds quick for all-keyboards
* trying out new script
* script update
* lowercase
* all keyboards
* stop replacing compiled.hex automatically
* adds if statement
* skip automated build branches
* forces push to automated build branch
* throw an add in there
* upstream?
* adds AUTOGEN
* ignore all .hex files again
* testing out new repo
* global ident
* generate script, keyboard_keymap.hex
* skip generation for now, print pandoc info, submodule update
* try trusty
* and sudo
* try generate
* updates subprojects to keyboards
* no idea
* updates to keyboards
* cleans up clueboard stuff
* setup to use local readme
* updates cluepad, planck experimental
* remove extra led.c [ci skip]
* audio and midi moved over to separate files
* chording, leader, unicode separated
* consolidate each [skip ci]
* correct include
* quantum: Add a tap dance feature (#451)
* quantum: Add a tap dance feature
With this feature one can specify keys that behave differently, based on
the amount of times they have been tapped, and when interrupted, they
get handled before the interrupter.
To make it clear how this is different from `ACTION_FUNCTION_TAP`, lets
explore a certain setup! We want one key to send `Space` on single tap,
but `Enter` on double-tap.
With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and
has the problem that when the sequence is interrupted, the interrupting
key will be send first. Thus, `SPC a` will result in `a SPC` being sent,
if they are typed within `TAPPING_TERM`. With the tap dance feature,
that'll come out as `SPC a`, correctly.
The implementation hooks into two parts of the system, to achieve this:
into `process_record_quantum()`, and the matrix scan. We need the latter
to be able to time out a tap sequence even when a key is not being
pressed, so `SPC` alone will time out and register after `TAPPING_TERM`
time.
But lets start with how to use it, first!
First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because
the feature is disabled by default. This adds a little less than 1k to
the firmware size. Next, you will want to define some tap-dance keys,
which is easiest to do with the `TD()` macro, that - similar to `F()`,
takes a number, which will later be used as an index into the
`tap_dance_actions` array.
This array specifies what actions shall be taken when a tap-dance key is
in action. Currently, there are two possible options:
* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when
tapped once, `kc2` otherwise.
* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in
the user keymap - with the current state of the tap-dance action.
The first option is enough for a lot of cases, that just want dual
roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in
`Space` being sent on single-tap, `Enter` otherwise.
And that's the bulk of it!
Do note, however, that this implementation does have some consequences:
keys do not register until either they reach the tapping ceiling, or
they time out. This means that if you hold the key, nothing happens, no
repeat, no nothing. It is possible to detect held state, and register an
action then too, but that's not implemented yet. Keys also unregister
immediately after being registered, so you can't even hold the second
tap. This is intentional, to be consistent.
And now, on to the explanation of how it works!
The main entry point is `process_tap_dance()`, called from
`process_record_quantum()`, which is run for every keypress, and our
handler gets to run early. This function checks whether the key pressed
is a tap-dance key. If it is not, and a tap-dance was in action, we
handle that first, and enqueue the newly pressed key. If it is a
tap-dance key, then we check if it is the same as the already active
one (if there's one active, that is). If it is not, we fire off the old
one first, then register the new one. If it was the same, we increment
the counter and the timer.
This means that you have `TAPPING_TERM` time to tap the key again, you
do not have to input all the taps within that timeframe. This allows for
longer tap counts, with minimal impact on responsiveness.
Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of
tap-dance keys.
For the sake of flexibility, tap-dance actions can be either a pair of
keycodes, or a user function. The latter allows one to handle higher tap
counts, or do extra things, like blink the LEDs, fiddle with the
backlighting, and so on. This is accomplished by using an union, and
some clever macros.
In the end, lets see a full example!
```c
enum {
CT_SE = 0,
CT_CLN,
CT_EGG
};
/* Have the above three on the keymap, TD(CT_SE), etc... */
void dance_cln (qk_tap_dance_state_t *state) {
if (state->count == 1) {
register_code (KC_RSFT);
register_code (KC_SCLN);
unregister_code (KC_SCLN);
unregister_code (KC_RSFT);
} else {
register_code (KC_SCLN);
unregister_code (KC_SCLN);
reset_tap_dance (state);
}
}
void dance_egg (qk_tap_dance_state_t *state) {
if (state->count >= 100) {
SEND_STRING ("Safety dance!");
reset_tap_dance (state);
}
}
const qk_tap_dance_action_t tap_dance_actions[] = {
[CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT)
,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln)
,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg)
};
```
This addresses #426.
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
* hhkb: Fix the build with the new tap-dance feature
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
* tap_dance: Move process_tap_dance further down
Process the tap dance stuff after midi and audio, because those don't
process keycodes, but row/col positions.
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
* tap_dance: Use conditionals instead of dummy functions
To be consistent with how the rest of the quantum features are
implemented, use ifdefs instead of dummy functions.
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
* Merge branch 'master' into quantum-keypress-process
# Conflicts:
# Makefile
# keyboards/planck/rev3/config.h
# keyboards/planck/rev4/config.h
* update build script
* non-working commit
* working
* subprojects implemented for planck
* pass a subproject variable through to c
* consolidates clueboard revisions
* thanks for letting me know about conflicts..
* turn off audio for yang's
* corrects starting paths for subprojects
* messing around with travis
* semicolon
* travis script
* travis script
* script for travis
* correct directory (probably), amend files to commit
* remove origin before adding
* git pull, correct syntax
* git checkout
* git pull origin branch
* where are we?
* where are we?
* merging
* force things to happen
* adds commit message, adds add
* rebase, no commit message
* rebase branch
* idk!
* try just pull
* fetch - merge
* specify repo branch
* checkout
* goddammit
* merge? idk
* pls
* after all
* don't split up keyboards
* syntax
* adds quick for all-keyboards
* trying out new script
* script update
* lowercase
* all keyboards
* stop replacing compiled.hex automatically
* adds if statement
* skip automated build branches
* forces push to automated build branch
* throw an add in there
* upstream?
* adds AUTOGEN
* ignore all .hex files again
* testing out new repo
* global ident
* generate script, keyboard_keymap.hex
* skip generation for now, print pandoc info, submodule update
* try trusty
* and sudo
* try generate
* updates subprojects to keyboards
* no idea
* updates to keyboards
* cleans up clueboard stuff
* setup to use local readme
* updates cluepad, planck experimental
* remove extra led.c [ci skip]
* disable power up for now
* config files updates
* makefile updates
* .h file updates, config tuning
* disable audio for yang
Unfortunately the supported targets, like "quick", "all", "clean",
and so on has to be repeated two extra times, but this is the best
I can do with my makefile skills.
* .build containment implemented
* no destructive variable setting - builds in either folder
* make from 3 places
* cleans before each build
* make from root with keyboard=keyboard, keymap=keymap
* make from keyboard/keyboard with keymap=keymap
* make from keymaps/keymap
* only implemented on planck
* adds color diag to avr-gcc
* makefiles for all plancks, clean-up
* quick build-all makefile for plancks
* reformatting of make output (colors)
* color toggle, tmk path corrections
* correct if statement for color
* move config.h to main makefile, updates preonic, atomic
* format update, all keyboards targets
* makefile optional for build all target, alps and arrow_pad updated
* alps updated
* make planck default, trying out travis recipe for all-keyboards
* all-keymaps target, different travis recipe
* updates alps64
* updates keyboards to new format
* updates clue* projects
* all projects updated, specialise EZ .hex, let .hex through
* updates travis
* automatically find root, keyboard, keymap
* silent echo, cleaned-up mass make output
* updates all keyboards' .hex files except EZ
* Rename Bantam44.c to bantam44.c
* Rename Bantam44.h to bantam44.h
* nananana
* adds six key keyboard
* does same to ez as rest
* updates send_string example
* brings ergodox_ez up to date
* updates template/new project script
* adds sixkeyboard
* adds readme for sixkeyboard
* adds sixkeyboard to travis
* filenames, gitignore mess
* define clock prescaler stuff manually
* make quick, size test example
* documentation and dfu-no-build
* Autodetect teensy-loader-cli over teensy_loader_cli.
Some distributions (e.g. Arch Linux, Guix) install teensy_loader_cli
as teensy-loader-cli. Use this one if it is installed.
* Update ergodox_ez/readme.md
- Mention Linux distris providing teensy-loader-cli
- Mention `make teensy ...`
* Updated personal layouts
* tweaked personal
* Nightly - Audio Cleanup
Refactored the LUTs. Abstracted some of the registers out of audio to
use more functional names. Split audio into audio and audio_pwm. WIP
* nightly - collapsed code
* Added check for note playing to LEDs
* Usability tweaks
* TWEAE
* nightly
added extra kcs to keymap common
* turned on Plank audio
* Added backlight breathing to atomic
* reverted accidental merge
* Added music and audio toggles to Quantum.c
* Redid the audio callbacks
* Adjusted default planck layout to use the user tone naming
* tabs to spaces
* Rewrote the ALL recipe to allow for faster parallel make
* tabs to spaces
* Renamed custom event functions to be 'startup_user' and 'shutdown_user'. Also moved the prototypes around.
* Tweaked pvc atomic layout to work with the pvc planck.
* updates midi scale calling
* Unicode
to have unicode input you need to:
- set your OS input method to UNICODE if needed
- enable unicode in your makefile
- copy the action_function from
keyboard/planck/keymaps/unicode/unicode.c to your keymap.c
set the target OS method in your keymap.c: void matrix_init_user() {
set_unicode_mode(UC_OSX); } you can then switch when you want with:
set_unicode_mode(UC_OSX); set_unicode_mode(UC_LNX);
set_unicode_mode(UC_WIN);
put some unicode codes in your keymap like so: UC(0x0061)
I did change the bit mask in quantum/keymap_common.c and .h
I’m afraid we will need uint32 to get a total support for all unicode
tables or relocate the handler as @mbarkhau did.
* rearranges keycode values, hooks-up unicode
* removes extra lalt ref
* adds unicode shortcuts and example
* implements leader key for planck experimental
* allows override of leader timeout
* adds ability to use the leader key in seq
* fixes leader keycode
* adds chording prototype
* fixes keycode detection
* moves music mode to quantum.c
* disables chording by default
* adds music sequencer functionality
* implements audio/music functions in quantum.c
* splits up process_action to allow independent processing of actions
* moves midi stuff to quantum.c
* adds additional scales for midi
* implements leader key for planck experimental
* allows override of leader timeout
* adds ability to use the leader key in seq
* fixes leader keycode
* adds chording prototype
* fixes keycode detection
* moves music mode to quantum.c
* disables chording by default
* adds music sequencer functionality
* implements audio/music functions in quantum.c
* splits up process_action to allow independent processing of actions
* merging?
* Updated personal layouts
* tweaked personal
* Nightly - Audio Cleanup
Refactored the LUTs. Abstracted some of the registers out of audio to
use more functional names. Split audio into audio and audio_pwm. WIP
* nightly - collapsed code
* Added check for note playing to LEDs
* Usability tweaks
* TWEAE
* nightly
added extra kcs to keymap common
* turned on Plank audio
* Added backlight breathing to atomic
* reverted accidental merge
* adds backlight pulse to planck
This commit is mostly a cherry-pick from `ahtn` at
https://github.com/tmk/tmk_keyboard/pull/255.
These are the changes:
* Adds ACTION_LAYER_ONESHOT
* Adds ONESHOT_TAP_TOGGLE
* Mentions sticky keys in the docs on oneshot.