aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Drashna Jaelre <drashna@live.com>2018-12-14 09:01:58 -0800
committerGravatar MechMerlin <30334081+mechmerlin@users.noreply.github.com>2018-12-14 09:01:58 -0800
commit02d44beb4410b806cb8c38e272941d212fee8a74 (patch)
treeb82be304dcea0c838b45abe2e9909a9f30a49dc9
parent80dfd34fe454f8dde67145fef51eb82ef7ea2e45 (diff)
downloadqmk_firmware-02d44beb4410b806cb8c38e272941d212fee8a74.tar.gz
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>
-rw-r--r--docs/config_options.md2
-rw-r--r--docs/feature_macros.md2
-rw-r--r--quantum/quantum.c8
-rw-r--r--quantum/quantum.h2
-rw-r--r--tmk_core/common/action.c12
-rw-r--r--tmk_core/common/action.h2
6 files changed, 26 insertions, 2 deletions
diff --git a/docs/config_options.md b/docs/config_options.md
index b811fa877..69fecc8b4 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -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.
* `#define COMBO_TERM 200`
* how long for the Combo keys to be detected. Defaults to `TAPPING_TERM` if not defined.
+* `#define TAP_CODE_DELAY 100`
+ * Sets the delay between `register_code` and `unregister_code`, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
## RGB Light Configuration
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index 29ba29fef..aa13fb97f 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -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).
+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();`
This will clear all mods and keys currently pressed.
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 69692233e..a57d4f89f 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -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))
bool process_action_kb(keyrecord_t *record) {
return true;
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 5920e4b13..0faf1af29 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -243,7 +243,7 @@ void shutdown_user(void);
void register_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
void backlight_init_ports(void);
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index 8bdcd54e3..456d1e25f 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -851,6 +851,18 @@ void unregister_code(uint8_t code)
*
* 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)
+ *
+ * FIXME: Needs documentation.
+ */
void register_mods(uint8_t mods)
{
if (mods) {
diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h
index 833febe9c..5d797fd62 100644
--- a/tmk_core/common/action.h
+++ b/tmk_core/common/action.h
@@ -88,7 +88,7 @@ void process_record(keyrecord_t *record);
void process_action(keyrecord_t *record, action_t action);
void register_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 unregister_mods(uint8_t mods);
//void set_mods(uint8_t mods);