qmk

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/qmk.git
Log | Files | Refs | Submodules | LICENSE

commit 3542e573c8ee464f62fc5e9a0f618d3a244048c0
parent b4161136167556afd9a6073aa476846b90e3bfab
Author: Drashna Jaelre <drashna@live.com>
Date:   Fri, 25 Jan 2019 12:11:38 -0800

Fix process_combo which assign -1 to uint16_t (#3697)


Diffstat:
quantum/process_keycode/process_combo.c | 18+++++++++---------
quantum/process_keycode/process_combo.h | 1+
2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/quantum/process_keycode/process_combo.c b/quantum/process_keycode/process_combo.c @@ -18,9 +18,6 @@ #include "print.h" -#define COMBO_TIMER_ELAPSED -1 - - __attribute__ ((weak)) combo_t key_combos[COMBO_COUNT] = { @@ -65,7 +62,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * if (-1 == (int8_t)index) return false; /* The combos timer is used to signal whether the combo is active */ - bool is_combo_active = COMBO_TIMER_ELAPSED == combo->timer ? false : true; + bool is_combo_active = combo->is_active; if (record->event.pressed) { KEY_STATE_DOWN(index); @@ -73,9 +70,10 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * if (is_combo_active) { if (ALL_COMBO_KEYS_ARE_DOWN) { /* Combo was pressed */ send_combo(combo->keycode, true); - combo->timer = COMBO_TIMER_ELAPSED; + combo->is_active = false; } else { /* Combo key was pressed */ combo->timer = timer_read(); + combo->is_active = true; #ifdef COMBO_ALLOW_ACTION_KEYS combo->prev_record = *record; #else @@ -99,6 +97,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * send_keyboard_report(); unregister_code16(keycode); #endif + combo->is_active = false; combo->timer = 0; } @@ -106,6 +105,7 @@ static bool process_single_combo(combo_t *combo, uint16_t keycode, keyrecord_t * } if (NO_COMBO_KEYS_ARE_DOWN) { + combo->is_active = true; combo->timer = 0; } @@ -132,14 +132,14 @@ void matrix_scan_combo(void) #pragma GCC diagnostic ignored "-Warray-bounds" combo_t *combo = &key_combos[i]; #pragma GCC diagnostic pop - if (combo->timer && - combo->timer != COMBO_TIMER_ELAPSED && + if (combo->is_active && + combo->timer && timer_elapsed(combo->timer) > COMBO_TERM) { - + /* This disables the combo, meaning key events for this * combo will be handled by the next processors in the chain */ - combo->timer = COMBO_TIMER_ELAPSED; + combo->is_active = false; #ifdef COMBO_ALLOW_ACTION_KEYS process_action(&combo->prev_record, diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h @@ -33,6 +33,7 @@ typedef struct uint8_t state; #endif uint16_t timer; + bool is_active; #ifdef COMBO_ALLOW_ACTION_KEYS keyrecord_t prev_record; #else