From 4ca434c6d1d892626f2472fe8b5aadd2df967f99 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 10 Feb 2020 15:53:32 -0700 Subject: [PATCH] Debounce on release --- src/board/system76/lemp9/kbscan.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/board/system76/lemp9/kbscan.c b/src/board/system76/lemp9/kbscan.c index c67a806..19a8f04 100644 --- a/src/board/system76/lemp9/kbscan.c +++ b/src/board/system76/lemp9/kbscan.c @@ -73,22 +73,25 @@ void kbscan_event(void) { if (new_b != last_b) { // If timer 2 is running if (TR2) { - // Debounce releases - if (!new_b) { + // Debounce presses and releases + if (new_b) { + // Restore bit, so that this press can be handled later + new &= ~(1 << j); + // Skip processing of press + continue; + } else { // Restore bit, so that this release can be handled later new |= (1 << j); // Skip processing of release continue; } } else { - // Begin debouncing on press - if (new_b) { - // Run timer 2 for 20 ms - // 65536-(20000 * 69 + 89)/90 = 0xC419 - TH2 = 0xC4; - TL2 = 0x19; - TR2 = 1; - } + // Begin debouncing on press or release + // Run timer 2 for 20 ms + // 65536-(20000 * 69 + 89)/90 = 0xC419 + TH2 = 0xC4; + TL2 = 0x19; + TR2 = 1; } uint16_t key = keymap(i, j, kbscan_layer);