forked from mirrors/qmk_firmware
Fix up tap_code functionality (#4609)
* 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>
This commit is contained in:
parent
80dfd34fe4
commit
02d44beb44
6 changed files with 26 additions and 2 deletions
|
@ -160,6 +160,8 @@ If you define these options you will enable the associated feature, which may in
|
||||||
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature.
|
* Set this to the number of combos that you're using in the [Combo](feature_combo.md) feature.
|
||||||
* `#define COMBO_TERM 200`
|
* `#define COMBO_TERM 200`
|
||||||
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
|
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
|
||||||
|
* `#define TAP_CODE_DELAY 100`
|
||||||
|
* Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
|
||||||
|
|
||||||
## RGB Light Configuration
|
## RGB Light Configuration
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,8 @@ Parallel to `register_code` function, this sends the `<kc>` keyup event to the c
|
||||||
|
|
||||||
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
|
This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
|
||||||
|
|
||||||
|
If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
|
||||||
|
|
||||||
### `clear_keyboard();`
|
### `clear_keyboard();`
|
||||||
|
|
||||||
This will clear all mods and keys currently pressed.
|
This will clear all mods and keys currently pressed.
|
||||||
|
|
|
@ -132,6 +132,14 @@ void unregister_code16 (uint16_t code) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tap_code16(uint16_t code) {
|
||||||
|
register_code16(code);
|
||||||
|
#if TAP_CODE_DELAY > 0
|
||||||
|
wait_ms(TAP_CODE_DELAY);
|
||||||
|
#endif
|
||||||
|
unregister_code16(code);
|
||||||
|
}
|
||||||
|
|
||||||
__attribute__ ((weak))
|
__attribute__ ((weak))
|
||||||
bool process_action_kb(keyrecord_t *record) {
|
bool process_action_kb(keyrecord_t *record) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -243,7 +243,7 @@ void shutdown_user(void);
|
||||||
|
|
||||||
void register_code16(uint16_t code);
|
void register_code16(uint16_t code);
|
||||||
void unregister_code16(uint16_t code);
|
void unregister_code16(uint16_t code);
|
||||||
inline void tap_code16(uint16_t code) { register_code16(code); unregister_code16(code); }
|
void tap_code16(uint16_t code);
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
void backlight_init_ports(void);
|
void backlight_init_ports(void);
|
||||||
|
|
|
@ -847,6 +847,18 @@ void unregister_code(uint8_t code)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** \brief Utilities for actions. (FIXME: Needs better description)
|
||||||
|
*
|
||||||
|
* FIXME: Needs documentation.
|
||||||
|
*/
|
||||||
|
void tap_code(uint8_t code) {
|
||||||
|
register_code(code);
|
||||||
|
#if TAP_CODE_DELAY > 0
|
||||||
|
wait_ms(TAP_CODE_DELAY);
|
||||||
|
#endif
|
||||||
|
unregister_code(code);
|
||||||
|
}
|
||||||
|
|
||||||
/** \brief Utilities for actions. (FIXME: Needs better description)
|
/** \brief Utilities for actions. (FIXME: Needs better description)
|
||||||
*
|
*
|
||||||
* FIXME: Needs documentation.
|
* FIXME: Needs documentation.
|
||||||
|
|
|
@ -88,7 +88,7 @@ void process_record(keyrecord_t *record);
|
||||||
void process_action(keyrecord_t *record, action_t action);
|
void process_action(keyrecord_t *record, action_t action);
|
||||||
void register_code(uint8_t code);
|
void register_code(uint8_t code);
|
||||||
void unregister_code(uint8_t code);
|
void unregister_code(uint8_t code);
|
||||||
inline void tap_code(uint8_t code) { register_code(code); unregister_code(code); }
|
void tap_code(uint8_t code);
|
||||||
void register_mods(uint8_t mods);
|
void register_mods(uint8_t mods);
|
||||||
void unregister_mods(uint8_t mods);
|
void unregister_mods(uint8_t mods);
|
||||||
//void set_mods(uint8_t mods);
|
//void set_mods(uint8_t mods);
|
||||||
|
|
Loading…
Reference in a new issue