diff options
Diffstat (limited to 'keyboards/redox_w/matrix.c')
| -rw-r--r-- | keyboards/redox_w/matrix.c | 135 | 
1 files changed, 18 insertions, 117 deletions
| diff --git a/keyboards/redox_w/matrix.c b/keyboards/redox_w/matrix.c index 703987a939..fd25231d9e 100644 --- a/keyboards/redox_w/matrix.c +++ b/keyboards/redox_w/matrix.c @@ -13,89 +13,21 @@   * You should have received a copy of the GNU General Public License   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ -#include <stdint.h> -#include <stdbool.h> -#if defined(__AVR__) -#include <avr/io.h> -#endif -#include "wait.h" -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" -#include "timer.h" -#include "protocol/serial.h" - -#if (MATRIX_COLS <= 8) -#    define print_matrix_header()  print("\nr/c 01234567\n") -#    define print_matrix_row(row)  print_bin_reverse8(matrix_get_row(row)) -#    define matrix_bitpop(i)       bitpop(matrix[i]) -#    define ROW_SHIFTER ((uint8_t)1) -#elif (MATRIX_COLS <= 16) -#    define print_matrix_header()  print("\nr/c 0123456789ABCDEF\n") -#    define print_matrix_row(row)  print_bin_reverse16(matrix_get_row(row)) -#    define matrix_bitpop(i)       bitpop16(matrix[i]) -#    define ROW_SHIFTER ((uint16_t)1) -#elif (MATRIX_COLS <= 32) -#    define print_matrix_header()  print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n") -#    define print_matrix_row(row)  print_bin_reverse32(matrix_get_row(row)) -#    define matrix_bitpop(i)       bitpop32(matrix[i]) -#    define ROW_SHIFTER  ((uint32_t)1) -#endif - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; - -__attribute__ ((weak)) -void matrix_init_quantum(void) { -    matrix_init_kb(); -} - -__attribute__ ((weak)) -void matrix_scan_quantum(void) { -    matrix_scan_kb(); -} - -__attribute__ ((weak)) -void matrix_init_kb(void) { -    matrix_init_user(); -} - -__attribute__ ((weak)) -void matrix_scan_kb(void) { -    matrix_scan_user(); -} - -__attribute__ ((weak)) -void matrix_init_user(void) { -} - -__attribute__ ((weak)) -void matrix_scan_user(void) { -} - -inline -uint8_t matrix_rows(void) { -    return MATRIX_ROWS; -} -inline -uint8_t matrix_cols(void) { -    return MATRIX_COLS; -} - -void matrix_init(void) { +#include "quantum.h" +#include "matrix.h" +#include "uart.h" -    matrix_init_quantum(); -    serial_init(); +void matrix_init_custom(void) { +    uart_init(1000000);  } -uint8_t matrix_scan(void) -{ +bool matrix_scan_custom(matrix_row_t current_matrix[]) {      uint32_t timeout = 0; +    bool changed = false;      //the s character requests the RF slave to send the matrix -    SERIAL_UART_DATA = 's'; +    uart_write('s');      //trust the external keystates entirely, erase the last data      uint8_t uart_data[11] = {0}; @@ -105,58 +37,27 @@ uint8_t matrix_scan(void)          //wait for the serial data, timeout if it's been too long          //this only happened in testing with a loose wire, but does no          //harm to leave it in here -        while(!SERIAL_UART_RXD_PRESENT){ +        while (!uart_available()) {              timeout++; -            if (timeout > 10000){ +            if (timeout > 10000) {                  break;              }          } -        uart_data[i] = SERIAL_UART_DATA; +        uart_data[i] = uart_read();      }      //check for the end packet, the key state bytes use the LSBs, so 0xE0      //will only show up here if the correct bytes were recieved -    if (uart_data[10] == 0xE0) -    { +    if (uart_data[10] == 0xE0) {          //shifting and transferring the keystates to the QMK matrix variable          for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -            matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 7; +            matrix_row_t current_row = (uint16_t) uart_data[i * 2] | (uint16_t) uart_data[i * 2 + 1] << 7; +            if (current_matrix[i] != current_row) { +                changed = true; +            } +            current_matrix[i] = current_row;          }      } - -    matrix_scan_quantum(); -    return 1; -} - -inline -bool matrix_is_on(uint8_t row, uint8_t col) -{ -    return (matrix[row] & ((matrix_row_t)1<<col)); -} - -inline -matrix_row_t matrix_get_row(uint8_t row) -{ -    return matrix[row]; -} - -void matrix_print(void) -{ -    print_matrix_header(); - -    for (uint8_t row = 0; row < MATRIX_ROWS; row++) { -        print_hex8(row); print(": "); -        print_matrix_row(row); -        print("\n"); -    } -} - -uint8_t matrix_key_count(void) -{ -    uint8_t count = 0; -    for (uint8_t i = 0; i < MATRIX_ROWS; i++) { -        count += matrix_bitpop(i); -    } -    return count; +    return changed;  } | 
