|
@@ -5,6 +5,7 @@
|
|
|
#include "timer.h"
|
|
|
#include "transport.h"
|
|
|
#include "quantum.h"
|
|
|
+#include "wait.h"
|
|
|
|
|
|
#ifdef PROTOCOL_LUFA
|
|
|
# include <LUFA/Drivers/USB/USB.h>
|
|
@@ -82,11 +83,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);
|
|
|
+
|
|
|
+ wait_us(1);
|
|
|
+ uint8_t pin_state = readPin(in_pin);
|
|
|
+
|
|
|
+ setPinInputHigh(out_pin);
|
|
|
+ matrix_io_delay();
|
|
|
+ return pin_state;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
__attribute__((weak)) bool is_keyboard_left(void) {
|
|
|
#if defined(SPLIT_HAND_PIN)
|
|
|
|
|
|
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)
|