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 d22817bf4..33586c431 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/>. | |||
25 | # include "split_common/split_util.h" | 25 | # include "split_common/split_util.h" |
26 | # include "split_common/transactions.h" | 26 | # include "split_common/transactions.h" |
27 | 27 | ||
28 | # ifndef ERROR_DISCONNECT_COUNT | ||
29 | # define ERROR_DISCONNECT_COUNT 5 | ||
30 | # endif // ERROR_DISCONNECT_COUNT | ||
31 | |||
32 | # define ROWS_PER_HAND (MATRIX_ROWS / 2) | 28 | # define ROWS_PER_HAND (MATRIX_ROWS / 2) |
33 | #else | 29 | #else |
34 | # define ROWS_PER_HAND (MATRIX_ROWS) | 30 | # define ROWS_PER_HAND (MATRIX_ROWS) |
@@ -307,33 +303,31 @@ void matrix_init(void) { | |||
307 | } | 303 | } |
308 | 304 | ||
309 | #ifdef SPLIT_KEYBOARD | 305 | #ifdef SPLIT_KEYBOARD |
306 | // Fallback implementation for keyboards not using the standard split_util.c | ||
307 | __attribute__((weak)) bool transport_master_if_connected(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { | ||
308 | transport_master(master_matrix, slave_matrix); | ||
309 | return true; // Treat the transport as always connected | ||
310 | } | ||
311 | |||
310 | bool matrix_post_scan(void) { | 312 | bool matrix_post_scan(void) { |
311 | bool changed = false; | 313 | bool changed = false; |
312 | if (is_keyboard_master()) { | 314 | if (is_keyboard_master()) { |
313 | static uint8_t error_count; | ||
314 | |||
315 | matrix_row_t slave_matrix[ROWS_PER_HAND] = {0}; | 315 | matrix_row_t slave_matrix[ROWS_PER_HAND] = {0}; |
316 | if (!transport_master(matrix + thisHand, slave_matrix)) { | 316 | if (transport_master_if_connected(matrix + thisHand, slave_matrix)) { |
317 | error_count++; | ||
318 | |||
319 | if (error_count > ERROR_DISCONNECT_COUNT) { | ||
320 | // reset other half if disconnected | ||
321 | for (int i = 0; i < ROWS_PER_HAND; ++i) { | ||
322 | matrix[thatHand + i] = 0; | ||
323 | slave_matrix[i] = 0; | ||
324 | } | ||
325 | |||
326 | changed = true; | ||
327 | } | ||
328 | } else { | ||
329 | error_count = 0; | ||
330 | |||
331 | for (int i = 0; i < ROWS_PER_HAND; ++i) { | 317 | for (int i = 0; i < ROWS_PER_HAND; ++i) { |
332 | if (matrix[thatHand + i] != slave_matrix[i]) { | 318 | if (matrix[thatHand + i] != slave_matrix[i]) { |
333 | matrix[thatHand + i] = slave_matrix[i]; | 319 | matrix[thatHand + i] = slave_matrix[i]; |
334 | changed = true; | 320 | changed = true; |
335 | } | 321 | } |
336 | } | 322 | } |
323 | } else { | ||
324 | // reset other half if disconnected | ||
325 | for (int i = 0; i < ROWS_PER_HAND; ++i) { | ||
326 | matrix[thatHand + i] = 0; | ||
327 | slave_matrix[i] = 0; | ||
328 | } | ||
329 | |||
330 | changed = true; | ||
337 | } | 331 | } |
338 | 332 | ||
339 | matrix_scan_quantum(); | 333 | matrix_scan_quantum(); |