Main Detection Loop
| 77 | |
| 78 | // Main Detection Loop |
| 79 | inline uint8_t Scan_loop() |
| 80 | { |
| 81 | // Check count to see if the sample threshold may have been reached, otherwise collect more data |
| 82 | if ( Scan_count < MAX_SAMPLES ) |
| 83 | { |
| 84 | matrix_scan( (uint8_t*)matrix_pinout, KeyIndex_Array ); |
| 85 | |
| 86 | // scanDual requires 2 passes, and thus needs more memory per matrix_scan pass |
| 87 | #if scanMode == scanDual |
| 88 | Scan_count += 2; |
| 89 | #else |
| 90 | Scan_count++; |
| 91 | #endif |
| 92 | |
| 93 | // Signal Main Detection Loop to continue scanning |
| 94 | return 0; |
| 95 | } |
| 96 | |
| 97 | // Reset Sample Counter |
| 98 | Scan_count = 0; |
| 99 | |
| 100 | // Assess debouncing sample table |
| 101 | // Loop over all of the sampled keys of the given array |
| 102 | // If the number of samples is higher than the sample threshold, flag the high bit, clear otherwise |
| 103 | // This should be resetting VERY quickly, cutting off a potentially valid keypress is not an issue |
| 104 | for ( uint8_t key = 1; key < KeyIndex_Size + 1; key++ ) if ( ( KeyIndex_Array[key] & ~(1 << 7) ) > SAMPLE_THRESHOLD ) |
| 105 | { |
| 106 | // Debug output (keypress detected) |
| 107 | printHex( key ); |
| 108 | print(" "); |
| 109 | |
| 110 | // Add the key to the buffer, if it isn't already in the current Key Buffer |
| 111 | for ( uint8_t c = 0; c < KeyIndex_BufferUsed + 1; c++ ) |
| 112 | { |
| 113 | // Key isn't in the buffer yet |
| 114 | if ( c == KeyIndex_BufferUsed ) |
| 115 | { |
| 116 | Macro_bufferAdd( key ); |
| 117 | break; |
| 118 | } |
| 119 | |
| 120 | // Key already in the buffer |
| 121 | if ( KeyIndex_Buffer[c] == key ) |
| 122 | break; |
| 123 | } |
| 124 | |
| 125 | KeyIndex_Array[key] = (1 << 7); |
| 126 | } |
| 127 | else |
| 128 | { |
| 129 | // Remove the key from the buffer only if it was previously known to be pressed |
| 130 | if ( KeyIndex_Array[key] & (1 << 7 ) ) |
| 131 | { |
| 132 | // Check for the released key, and shift the other keys lower on the buffer |
| 133 | for ( uint8_t c = 0; c < KeyIndex_BufferUsed; c++ ) |
| 134 | { |
| 135 | // Key to release found |
| 136 | if ( KeyIndex_Buffer[c] == key ) |
nothing calls this directly
no test coverage detected
searching dependent graphs…