diff options
author | Danny <nooges@users.noreply.github.com> | 2018-05-28 18:02:41 -0400 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2018-05-28 15:02:41 -0700 |
commit | 2b677ddac9aaba14f75787ab4b6d81054ad6ffd4 (patch) | |
tree | 61079929788a447a26de38776b7eb9eacebe9a2e /keyboards/nyquist/matrix.c | |
parent | 8ddebce2d7d42eedbafae5b92dff1af229115fac (diff) |
Fix nyquist (and other splits using D2 in debouncing) (#3067)
* Update default Nyquist revision
* LED slave fix
* Sync changes from lets_split
* Add needed check for debouncing
* Remove line that was setting PD2 pin and interfering with use of that pin
* Add backlight key to keymap
Diffstat (limited to 'keyboards/nyquist/matrix.c')
-rw-r--r-- | keyboards/nyquist/matrix.c | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/keyboards/nyquist/matrix.c b/keyboards/nyquist/matrix.c index 5fbae1150e..3cdad4adb8 100644 --- a/keyboards/nyquist/matrix.c +++ b/keyboards/nyquist/matrix.c @@ -1,5 +1,5 @@ /* -Copyright 2017 Danny Nguyen <danny@hexwire.com> +Copyright 2017 Danny Nguyen <danny@keeb.io> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,6 +31,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "config.h" #include "timer.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" + extern backlight_config_t backlight_config; +#endif + #ifdef USE_I2C # include "i2c.h" #else // USE_SERIAL @@ -58,6 +63,8 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS]; #define ERROR_DISCONNECT_COUNT 5 +#define SERIAL_LED_ADDR 0x00 + #define ROWS_PER_HAND (MATRIX_ROWS/2) static uint8_t error_count = 0; @@ -115,12 +122,23 @@ uint8_t matrix_cols(void) void matrix_init(void) { +#ifdef DISABLE_JTAG + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1<<JTD); + MCUCR |= (1<<JTD); +#endif + debug_enable = true; debug_matrix = true; debug_mouse = true; // initialize row and col +#if (DIODE_DIRECTION == COL2ROW) unselect_rows(); init_cols(); +#elif (DIODE_DIRECTION == ROW2COL) + unselect_cols(); + init_rows(); +#endif TX_RX_LED_INIT; @@ -146,7 +164,6 @@ uint8_t _matrix_scan(void) if (matrix_changed) { debouncing = true; debouncing_time = timer_read(); - PORTD ^= (1 << 2); } # else @@ -196,6 +213,15 @@ int i2c_transaction(void) { err = i2c_master_write(0x00); if (err) goto i2c_error; +#ifdef BACKLIGHT_ENABLE + // Write backlight level for slave to read + err = i2c_master_write(backlight_config.enable ? backlight_config.level : 0); +#else + // Write zero, so our byte index is the same + err = i2c_master_write(0x00); +#endif + if (err) goto i2c_error; + // Start read err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); if (err) goto i2c_error; @@ -228,6 +254,11 @@ int serial_transaction(void) { for (int i = 0; i < ROWS_PER_HAND; ++i) { matrix[slaveOffset+i] = serial_slave_buffer[i]; } + +#ifdef BACKLIGHT_ENABLE + // Write backlight level for slave to read + serial_master_buffer[SERIAL_LED_ADDR] = backlight_config.enable ? backlight_config.level : 0; +#endif return 0; } #endif @@ -268,19 +299,30 @@ void matrix_slave_scan(void) { int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; #ifdef USE_I2C +#ifdef BACKLIGHT_ENABLE + // Read backlight level sent from master and update level on slave + backlight_set(i2c_slave_buffer[0]); +#endif for (int i = 0; i < ROWS_PER_HAND; ++i) { - i2c_slave_buffer[i] = matrix[offset+i]; + i2c_slave_buffer[i+1] = matrix[offset+i]; } #else // USE_SERIAL for (int i = 0; i < ROWS_PER_HAND; ++i) { serial_slave_buffer[i] = matrix[offset+i]; } + +#ifdef BACKLIGHT_ENABLE + // Read backlight level sent from master and update level on slave + backlight_set(serial_master_buffer[SERIAL_LED_ADDR]); +#endif #endif } bool matrix_is_modified(void) { +#if (DEBOUNCING_DELAY > 0) if (debouncing) return false; +#endif return true; } |