From f644db042c488a19c2256c9f3870b5bd331cc98c Mon Sep 17 00:00:00 2001 From: Garrett Singer Date: Sun, 4 Aug 2019 00:26:02 -0400 Subject: [PATCH] [Split] Add config option for DIRECT_PINS_RIGHT (#6479) Adds support for different direct pin mappings on the halves of a split keyboard. --- docs/config_options.md | 3 +++ docs/feature_split_keyboard.md | 5 +++++ quantum/split_common/matrix.c | 8 ++++++++ 3 files changed, 16 insertions(+) diff --git a/docs/config_options.md b/docs/config_options.md index 01c0e3ee8..3be294db8 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -248,6 +248,9 @@ There are a few different ways to set handedness for split keyboards (listed in * `#define MATRIX_COL_PINS_RIGHT { }` * If you want to specify a different pinout for the right half than the left half, you can define `MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT`. Currently, the size of `MATRIX_ROW_PINS` must be the same as `MATRIX_ROW_PINS_RIGHT` and likewise for the definition of columns. +* `#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }` + * If you want to specify a different direct pinout for the right half than the left half, you can define `DIRECT_PINS_RIGHT`. Currently, the size of `DIRECT_PINS` must be the same as `DIRECT_PINS_RIGHT`. + * `#define RGBLED_SPLIT { 6, 6 }` * See [RGB Light Configuration](#rgb-light-configuration) diff --git a/docs/feature_split_keyboard.md b/docs/feature_split_keyboard.md index 95aceab22..4addb1bfd 100644 --- a/docs/feature_split_keyboard.md +++ b/docs/feature_split_keyboard.md @@ -160,6 +160,11 @@ There are some settings that you may need to configure, based on how the hardwar This allows you to specify a different set of pins for the matrix on the right side. This is useful if you have a board with differently-shaped halves that requires a different configuration (such as Keebio's Quefrency). +```c +#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } } +``` + +This allows you to specify a different set of direct pins for the right side. ```c #define RGBLIGHT_SPLIT diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c index 41a15ace4..e0f094e34 100644 --- a/quantum/split_common/matrix.c +++ b/quantum/split_common/matrix.c @@ -252,6 +252,14 @@ void matrix_init(void) { // Set pinout for right half if pinout for that half is defined if (!isLeftHand) { +#ifdef DIRECT_PINS_RIGHT + const pin_t direct_pins_right[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS_RIGHT; + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + for (uint8_t j = 0; j < MATRIX_COLS; j++) { + direct_pins[i][j] = direct_pins_right[i][j]; + } + } +#endif #ifdef MATRIX_ROW_PINS_RIGHT const pin_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT; for (uint8_t i = 0; i < MATRIX_ROWS; i++) {