From 063f14f72d79bb9fada650306bbd6aba6e77258b Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Sat, 4 Jul 2020 23:04:47 +0900 Subject: add SPLIT_HAND_MATRIX_GRID support (#8685) Co-authored-by: Danny --- quantum/split_common/split_util.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'quantum') diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index dfd06f5f94..0850d8041f 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -5,6 +5,7 @@ #include "timer.h" #include "transport.h" #include "quantum.h" +#include "wait.h" #ifdef PROTOCOL_LUFA # include @@ -79,11 +80,34 @@ static inline bool usbIsActive(void) { static inline bool usbIsActive(void) { return true; } #endif +#ifdef SPLIT_HAND_MATRIX_GRID +void matrix_io_delay(void); + +static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) { + setPinInputHigh(in_pin); + setPinOutput(out_pin); + writePinLow(out_pin); + // It's almost unnecessary, but wait until it's down to low, just in case. + wait_us(1); + uint8_t pin_state = readPin(in_pin); + // Set out_pin to a setting that is less susceptible to noise. + setPinInputHigh(out_pin); + matrix_io_delay(); // Wait for the pull-up to go HIGH. + return pin_state; +} +#endif + __attribute__((weak)) bool is_keyboard_left(void) { #if defined(SPLIT_HAND_PIN) // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand setPinInput(SPLIT_HAND_PIN); return readPin(SPLIT_HAND_PIN); +#elif defined(SPLIT_HAND_MATRIX_GRID) +# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT + return peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); +# else + return !peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); +# endif #elif defined(EE_HANDS) return eeconfig_read_handedness(); #elif defined(MASTER_RIGHT) -- cgit v1.2.3