diff options
Diffstat (limited to 'quantum/matrix.c')
-rw-r--r-- | quantum/matrix.c | 36 |
1 files changed, 15 insertions, 21 deletions
diff --git a/quantum/matrix.c b/quantum/matrix.c index d22817bf48..33586c431b 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -25,10 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. # include "split_common/split_util.h" # include "split_common/transactions.h" -# ifndef ERROR_DISCONNECT_COUNT -# define ERROR_DISCONNECT_COUNT 5 -# endif // ERROR_DISCONNECT_COUNT - # define ROWS_PER_HAND (MATRIX_ROWS / 2) #else # define ROWS_PER_HAND (MATRIX_ROWS) @@ -307,33 +303,31 @@ void matrix_init(void) { } #ifdef SPLIT_KEYBOARD +// Fallback implementation for keyboards not using the standard split_util.c +__attribute__((weak)) bool transport_master_if_connected(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { + transport_master(master_matrix, slave_matrix); + return true; // Treat the transport as always connected +} + bool matrix_post_scan(void) { bool changed = false; if (is_keyboard_master()) { - static uint8_t error_count; - matrix_row_t slave_matrix[ROWS_PER_HAND] = {0}; - if (!transport_master(matrix + thisHand, slave_matrix)) { - error_count++; - - if (error_count > ERROR_DISCONNECT_COUNT) { - // reset other half if disconnected - for (int i = 0; i < ROWS_PER_HAND; ++i) { - matrix[thatHand + i] = 0; - slave_matrix[i] = 0; - } - - changed = true; - } - } else { - error_count = 0; - + if (transport_master_if_connected(matrix + thisHand, slave_matrix)) { for (int i = 0; i < ROWS_PER_HAND; ++i) { if (matrix[thatHand + i] != slave_matrix[i]) { matrix[thatHand + i] = slave_matrix[i]; changed = true; } } + } else { + // reset other half if disconnected + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[thatHand + i] = 0; + slave_matrix[i] = 0; + } + + changed = true; } matrix_scan_quantum(); |