]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Adding DebounceThrottleDiv define to slow down the debounce rate.
authorJacob Alexander <haata@kiibohd.com>
Sat, 7 Mar 2015 06:18:15 +0000 (22:18 -0800)
committerJacob Alexander <haata@kiibohd.com>
Sat, 7 Mar 2015 06:18:15 +0000 (22:18 -0800)
By default:
DebounceThrottleDiv = 0;
This is the default infinity behaviour right now (may be changed in the future).

Increasing DebounceThrottleDiv will increase the scan rate divider.
DebounceThrottleDiv = 1; # Scans half as much
DebounceThrottleDiv = 2; # Scans a quarter as much
DebounceThrottleDiv = 3; # Scans an eigth as much
etc.

For ARM based uCs (like the Infinity) the maximum divider is 32.

Scan/MatrixARM/capabilities.kll
Scan/MatrixARM/matrix_scan.c

index 319b81d865dfe538a22b423831ebc9642671ed43..8221ec8f2d6e2ad7f11e2f73f8204b457099bd80 100644 (file)
@@ -18,3 +18,17 @@ DebounceDivThreshold => DebounceDivThreshold_define;
 DebounceDivThreshold = 0xFFFF; # Default debounce
 #DebounceDivThreshold = 0xFFFFFFFF; # Max debounce
 
+# This defines how often the matrix is scanned
+# By, default the key matrix is scanned once per macro processing loop
+# For fast uCs and bouncy switches, this can be non-ideal
+# 0 - Bit-shift of 0
+# 1 - Bit-shift of 1 (i.e. divide by 2)
+# 2 - Bit-shift of 2 (i.e. divide by 4)
+# 3 - Bit-shift of 3 (i.e. divide by 8)
+# etc.
+# Depending on the architecture, this is either a maximum of 16 or 32
+# Increasing this value will increase switch latency
+DebounceThrottleDiv => DebounceThrottleDiv_define;
+DebounceThrottleDiv = 0; # Default
+#DebounceThrottleDiv = 2; # /4 divider
+
index eaea368f4b01e6a8635879e4f9ba1b25e92ca3dc..85f82050f33cb4ef83ce08086af369d85db0ccc0 100644 (file)
@@ -26,6 +26,7 @@
 
 // Project Includes
 #include <cli.h>
+#include <kll.h>
 #include <led.h>
 #include <print.h>
 #include <macro.h>
 
 
 
+// ----- Defines -----
+
+#if ( DebounceThrottleDiv_define > 0 )
+nat_ptr_t Matrix_divCounter = 0;
+#endif
+
+
+
 // ----- Function Declarations -----
 
 // CLI Functions
@@ -232,6 +241,15 @@ void Matrix_keyPositionDebug( KeyPosition pos )
 // NOTE: scanNum should be reset to 0 after a USB send (to reset all the counters)
 void Matrix_scan( uint16_t scanNum )
 {
+#if ( DebounceThrottleDiv_define > 0 )
+       // Scan-rate throttling
+       // By scanning using a divider, the scan rate slowed down
+       // DebounceThrottleDiv_define == 1 means -> /2 or half scan rate
+       // This helps with bouncy switches on fast uCs
+       if ( !( Matrix_divCounter++ & (1 << ( DebounceThrottleDiv_define - 1 )) ) )
+               return;
+#endif
+
        // Increment stats counters
        if ( scanNum > matrixMaxScans ) matrixMaxScans = scanNum;
        if ( scanNum == 0 )