~ruther/qmk_firmware

c681b6dbf300270e3e93ab72a57d4a7c18d794e1 — Tomasz Janeczko 3 years ago 5d767f8
[Keyboard] Handle timeout on UART for Redox Wireless (#17203)

* Handle timeout on UART for Redox Wireless receiver-to-keyboard communication.

- This fixes the issue of a keyboard deadlocking on the first matrix
  scan with Redox Wireless keyboards

* Remove an explicit cast.

Co-authored-by: Tomasz Janeczko <tomasz.j@hey.com>
1 files changed, 9 insertions(+), 2 deletions(-)

M keyboards/redox_w/matrix.c
M keyboards/redox_w/matrix.c => keyboards/redox_w/matrix.c +9 -2
@@ 18,6 18,8 @@
#include "matrix.h"
#include "uart.h"

#define UART_MATRIX_RESPONSE_TIMEOUT 10000

void matrix_init_custom(void) {
    uart_init(1000000);
}


@@ 39,11 41,16 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
        //harm to leave it in here
        while (!uart_available()) {
            timeout++;
            if (timeout > 10000) {
            if (timeout > UART_MATRIX_RESPONSE_TIMEOUT) {
                break;
            }
        }
        uart_data[i] = uart_read();

        if (timeout < UART_MATRIX_RESPONSE_TIMEOUT) {
            uart_data[i] = uart_read();
        } else {
            uart_data[i] = 0x00;
        }
    }

    //check for the end packet, the key state bytes use the LSBs, so 0xE0