]> git.donarmstrong.com Git - kiibohd-controller.git/blobdiff - Scan/DPH/scan_loop.c
Code cleanup
[kiibohd-controller.git] / Scan / DPH / scan_loop.c
index 132b39fb046e4358f18b2c7a585f923ba89c37b1..1a0176c4b5404932382e0a22d4e2bd6d05a1c82d 100644 (file)
@@ -143,27 +143,29 @@ void recovery( uint8_t on );
 
 // ----- Variables -----
 
-// Buffer used to inform the macro processing module which keys have been detected as pressed
-volatile uint8_t KeyIndex_Buffer[KEYBOARD_BUFFER];
-volatile uint8_t KeyIndex_BufferUsed;
-
-
 // Scan Module command dictionary
-char*       scanCLIDictName = "DPH Module Commands";
-CLIDictItem scanCLIDict[] = {
-       { "echo",        "Example command, echos the arguments.", cliFunc_echo },
-       { "avgDebug",    "Enables/Disables averaging results." NL "\t\tDisplays each average, starting from Key 0x00, ignoring 0 valued averages.", cliFunc_avgDebug },
-       { "keyDebug",    "Enables/Disables long debug for each keypress." NL "\t\tkeycode - [strobe:mux] : sense val : threshold+delta=total : margin", cliFunc_keyDebug },
-       { "pressDebug",  "Enables/Disables short debug for each keypress.", cliFunc_pressDebug },
-       { "problemKeys", "Display current list of problem keys,", cliFunc_problemKeys },
-       { "senseDebug",  "Prints out the current sense table N times." NL "\t\tsense:max sense:delta", cliFunc_senseDebug },
+CLIDict_Entry( echo,        "Example command, echos the arguments." );
+CLIDict_Entry( avgDebug,    "Enables/Disables averaging results." NL "\t\tDisplays each average, starting from Key 0x00, ignoring 0 valued averages." );
+CLIDict_Entry( keyDebug,    "Enables/Disables long debug for each keypress." NL "\t\tkeycode - [strobe:mux] : sense val : threshold+delta=total : margin" );
+CLIDict_Entry( pressDebug,  "Enables/Disables short debug for each keypress." );
+CLIDict_Entry( problemKeys, "Display current list of problem keys," );
+CLIDict_Entry( senseDebug,  "Prints out the current sense table N times." NL "\t\tsense:max sense:delta" );
+
+CLIDict_Def( scanCLIDict, "DPH Module Commands" ) = {
+       CLIDict_Item( echo ),
+       CLIDict_Item( avgDebug ),
+       CLIDict_Item( keyDebug ),
+       CLIDict_Item( pressDebug ),
+       CLIDict_Item( problemKeys ),
+       CLIDict_Item( senseDebug ),
        { 0, 0, 0 } // Null entry for dictionary end
 };
 
+
 // CLI Control Variables
 uint8_t enableAvgDebug   = 0;
 uint8_t enableKeyDebug   = 0;
-uint8_t enablePressDebug = 1;
+uint8_t enablePressDebug = 0;
 uint8_t senseDebugCount  = 3; // In order to get boot-time oddities
 
 
@@ -320,19 +322,17 @@ inline uint8_t Scan_loop()
 }
 
 
-// Signal KeyIndex_Buffer that it has been properly read
+// Signal from macro module that keys have been processed
 // NOTE: Only really required for implementing "tricks" in converters for odd protocols
-void Scan_finishedWithBuffer( uint8_t sentKeys )
+void Scan_finishedWithMacro( uint8_t sentKeys )
 {
-       // Convenient place to clear the KeyIndex_Buffer
-       KeyIndex_BufferUsed = 0;
        return;
 }
 
 
-// Signal KeyIndex_Buffer that it has been properly read and sent out by the USB module
+// Signal from output module that keys have been processed/sent
 // NOTE: Only really required for implementing "tricks" in converters for odd protocols
-void Scan_finishedWithUSBBuffer( uint8_t sentKeys )
+void Scan_finishedWithOutput( uint8_t sentKeys )
 {
        return;
 }
@@ -484,7 +484,8 @@ inline void capsense_scan()
                                }
                        }
 
-                       info_print("If problem keys were detected, and were being held down, they will be reset as soon as let go");
+                       info_print("If problem keys were detected, and were being held down, they will be reset as soon as let go.");
+                       info_print("Some keys have unusually high sense values, on the first press they should be re-enabled.");
                        break;
                }
        }
@@ -608,7 +609,7 @@ void recovery( uint8_t on )
                PORTD &= ~D_MASK;
                PORTE &= ~E_MASK;
 
-               DDRB  |= (1 << RECOVERY_SINK);   // SINK pull
+               DDRB  |= (1 << RECOVERY_SINK);   // SINK pull
                PORTB |= (1 << RECOVERY_CONTROL);
                PORTB |= (1 << RECOVERY_SOURCE); // SOURCE high
                DDRB  |= (1 << RECOVERY_SOURCE);
@@ -618,7 +619,7 @@ void recovery( uint8_t on )
                PORTB &= ~(1 << RECOVERY_CONTROL);
                DDRB  &= ~(1 << RECOVERY_SOURCE);
                PORTB &= ~(1 << RECOVERY_SOURCE); // SOURCE low
-               DDRB  &= ~(1 << RECOVERY_SINK);   // SINK high-imp
+               DDRB  &= ~(1 << RECOVERY_SINK);   // SINK high-imp
        }
 }
 
@@ -765,9 +766,10 @@ void testColumn( uint8_t strobe )
                // Check if this is a bad key (e.g. test point, or non-existent key)
                if ( keys_problem[key] )
                {
-                       // If the sample value of the problem key goes below full_avg (overall initial average)
+                       // If the sample value of the problem key goes above initally recorded result + threshold
                        //  re-enable the key
-                       if ( (db_sample = samples[strobe][mux] >> 1) < full_avg )
+                       if ( (db_sample = samples[strobe][mux] >> 1) > keys_problem[key] + threshold )
+                       //if ( (db_sample = samples[strobe][mux] >> 1) < high_avg )
                        {
                                info_msg("Re-enabling problem key: ");
                                printHex( key );
@@ -803,23 +805,26 @@ void testColumn( uint8_t strobe )
                                                print(" ");
                                        }
 
-                                       // Only add the key to the buffer once
-                                       // NOTE: Buffer can easily handle multiple adds, just more efficient
-                                       //        and nicer debug messages :P
-                                       Macro_bufferAdd( key );
+                                       // Initial Keypress
+                                       Macro_keyState( key, 0x01 );
                                }
 
                                keys_debounce[key]++;
 
                        }
+                       else if ( keys_debounce[key] >= DEBOUNCE_THRESHOLD )
+                       {
+                               // Held Key
+                               Macro_keyState( key, 0x02 );
+                       }
 
                        // Long form key debugging
                        if ( enableKeyDebug )
                        {
                                // Debug message
                                // <key> [<strobe>:<mux>] : <sense val> : <delta + threshold> : <margin>
-                               dbug_msg("0x");
-                               printHex_op( key, 2 );
+                               dbug_msg("");
+                               printHex_op( key, 1 );
                                print(" [");
                                printInt8( strobe );
                                print(":");
@@ -840,23 +845,11 @@ void testColumn( uint8_t strobe )
                // Clear debounce entry if no keypress detected
                else
                {
-                       // If the key was previously pressed, remove from the buffer
-                       for ( uint8_t c = 0; c < KeyIndex_BufferUsed; c++ )
-                        {
-                                // Key to release found
-                                if ( KeyIndex_Buffer[c] == key )
-                                {
-                                        // Shift keys from c position
-                                        for ( uint8_t k = c; k < KeyIndex_BufferUsed - 1; k++ )
-                                                KeyIndex_Buffer[k] = KeyIndex_Buffer[k + 1];
-
-                                        // Decrement Buffer
-                                        KeyIndex_BufferUsed--;
-
-                                        break;
-                                }
-                        }
-
+                       // Release Key
+                       if ( keys_debounce[key] >= DEBOUNCE_THRESHOLD )
+                       {
+                               Macro_keyState( key, 0x03 );
+                       }
 
                        // Clear debounce entry
                        keys_debounce[key] = 0;
@@ -1036,7 +1029,7 @@ void cliFunc_senseDebug( char* args )
        // If there was an argument, use that instead
        if ( *arg1Ptr != '\0' )
        {
-               senseDebugCount = decToInt( arg1Ptr );
+               senseDebugCount = numToInt( arg1Ptr );
        }
 }