mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-12-01 21:26:55 +06:00
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
This commit is contained in:
parent
8ddebce2d7
commit
2b677ddac9
|
@ -146,7 +146,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -151,7 +151,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -149,7 +149,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -157,7 +157,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -153,7 +153,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -157,7 +157,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -153,7 +153,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -36,6 +36,7 @@ enum custom_keycodes {
|
||||||
#define KC_X2 RAISE
|
#define KC_X2 RAISE
|
||||||
#define KC_X3 LT(_FN3, KC_GRV)
|
#define KC_X3 LT(_FN3, KC_GRV)
|
||||||
#define KC_X4 MT(MOD_LSFT, KC_ENT)
|
#define KC_X4 MT(MOD_LSFT, KC_ENT)
|
||||||
|
#define KC_BL_S BL_STEP
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
@ -91,7 +92,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
||||||
,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, ,
|
,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, ,
|
||||||
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
//|----+----+----+----+----+----| |----+----+----+----+----+----|
|
||||||
, , , , , , DEL , , P0 ,PDOT, ,
|
BL_S, , , , , , DEL , , P0 ,PDOT, ,
|
||||||
//`----+----+----+----+----+----' `----+----+----+----+----+----'
|
//`----+----+----+----+----+----' `----+----+----+----+----+----'
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
|
@ -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
|
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
|
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 "config.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#include "backlight.h"
|
||||||
|
extern backlight_config_t backlight_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_I2C
|
#ifdef USE_I2C
|
||||||
# include "i2c.h"
|
# include "i2c.h"
|
||||||
#else // USE_SERIAL
|
#else // USE_SERIAL
|
||||||
|
@ -58,6 +63,8 @@ static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
#define ERROR_DISCONNECT_COUNT 5
|
#define ERROR_DISCONNECT_COUNT 5
|
||||||
|
|
||||||
|
#define SERIAL_LED_ADDR 0x00
|
||||||
|
|
||||||
#define ROWS_PER_HAND (MATRIX_ROWS/2)
|
#define ROWS_PER_HAND (MATRIX_ROWS/2)
|
||||||
|
|
||||||
static uint8_t error_count = 0;
|
static uint8_t error_count = 0;
|
||||||
|
@ -115,12 +122,23 @@ uint8_t matrix_cols(void)
|
||||||
|
|
||||||
void matrix_init(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_enable = true;
|
||||||
debug_matrix = true;
|
debug_matrix = true;
|
||||||
debug_mouse = true;
|
debug_mouse = true;
|
||||||
// initialize row and col
|
// initialize row and col
|
||||||
|
#if (DIODE_DIRECTION == COL2ROW)
|
||||||
unselect_rows();
|
unselect_rows();
|
||||||
init_cols();
|
init_cols();
|
||||||
|
#elif (DIODE_DIRECTION == ROW2COL)
|
||||||
|
unselect_cols();
|
||||||
|
init_rows();
|
||||||
|
#endif
|
||||||
|
|
||||||
TX_RX_LED_INIT;
|
TX_RX_LED_INIT;
|
||||||
|
|
||||||
|
@ -146,7 +164,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
@ -196,6 +213,15 @@ int i2c_transaction(void) {
|
||||||
err = i2c_master_write(0x00);
|
err = i2c_master_write(0x00);
|
||||||
if (err) goto i2c_error;
|
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
|
// Start read
|
||||||
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
|
err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
|
||||||
if (err) goto i2c_error;
|
if (err) goto i2c_error;
|
||||||
|
@ -228,6 +254,11 @@ int serial_transaction(void) {
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
matrix[slaveOffset+i] = serial_slave_buffer[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;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -268,19 +299,30 @@ void matrix_slave_scan(void) {
|
||||||
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
||||||
|
|
||||||
#ifdef USE_I2C
|
#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) {
|
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
|
#else // USE_SERIAL
|
||||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||||
serial_slave_buffer[i] = matrix[offset+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
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool matrix_is_modified(void)
|
bool matrix_is_modified(void)
|
||||||
{
|
{
|
||||||
|
#if (DEBOUNCING_DELAY > 0)
|
||||||
if (debouncing) return false;
|
if (debouncing) return false;
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,13 +58,13 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
MIDI_ENABLE = no # MIDI controls
|
MIDI_ENABLE = no # MIDI controls
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
UNICODE_ENABLE = no # Unicode
|
UNICODE_ENABLE = no # Unicode
|
||||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
|
||||||
USE_I2C = yes
|
USE_I2C = yes
|
||||||
|
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||||
|
|
||||||
|
@ -72,4 +72,4 @@ CUSTOM_MATRIX = yes
|
||||||
|
|
||||||
LAYOUTS = ortho_5x12
|
LAYOUTS = ortho_5x12
|
||||||
|
|
||||||
DEFAULT_FOLDER = nyquist/rev1
|
DEFAULT_FOLDER = nyquist/rev2
|
||||||
|
|
|
@ -146,7 +146,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -198,7 +198,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -146,7 +146,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -148,7 +148,6 @@ uint8_t _matrix_scan(void)
|
||||||
if (matrix_changed) {
|
if (matrix_changed) {
|
||||||
debouncing = true;
|
debouncing = true;
|
||||||
debouncing_time = timer_read();
|
debouncing_time = timer_read();
|
||||||
PORTD ^= (1 << 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# else
|
# else
|
||||||
|
|
Loading…
Reference in New Issue
Block a user