From 155e9310ff685f557287749bef2e02510538a6d9 Mon Sep 17 00:00:00 2001
From: Takeshi ISHII <2170248+mtei@users.noreply.github.com>
Date: Sat, 15 Dec 2018 04:00:10 +0900
Subject: [PATCH] Make quantum/split_common/serial.[ch] configurable (#4419)
* add temporary compile test shell script
* add 'CONFIG_H += serial_backward_compatibility.h' into common_features.mk:SPLIT_KEYBOARD block
* add quantum/split_common/serial_backward_compatibility.h
SERIAL_PIN_PORT and other PIN define move to serial_backward_compatibility.h
SERIAL_BACKLIT_START move to split_util.h
* quantum/split_common/serial.c change to helix-serial.c style serial configuration
* add temporary file quantum/split_common/split-keyboards-list.txt
* add '#define SOFT_SERIAL_PIN D0' to keyboards/6lit/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/divergetm2/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/ergotravel/rev1/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/foobar/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/handwired/dactyl_manuform/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/handwired/qc60/config.h
* add '//#define SOFT_SERIAL_PIN D0' to keyboards/handwired/xealous/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/iris/rev*/config.h
* add '//#define SOFT_SERIAL_PIN D0' to keyboards/lets_split_eh/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/levinson/rev*/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/miniaxe/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/nyquist/rev?/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/quefrency/rev1/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/qwertyydox/config.h,keyboards/qwertyydox/rev1/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/redox/rev1/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/rorschach/rev1/config.h
* remove '#define SOFT_SERIAL_PIN D0' from quantum/split_common/serial_backward_compatibility.h
* remove temporary file quantum/split_common/split-keyboards-list.txt
* remove temporary compile test shell script
* Revert "remove temporary compile test shell script"
This reverts commit 15b0021b4092127b8d8a21f572642ad3702b46d4.
* update quantum/split_common/compile_split_test.sh for new keyboard test
* add '#define SOFT_SERIAL_PIN D0' to keyboards/diverge3/config.h
* add '#define SOFT_SERIAL_PIN D0' to keyboards/40percentclub/25/config.h
* remove temporary compile test shell script
* update docs/config_options.md, quantum/template/avr/config.h
* fix quantum/template/avr/config.h
* fix typo docs/config_options.md
---
common_features.mk | 5 ++
docs/config_options.md | 3 ++
keyboards/40percentclub/25/config.h | 2 +
keyboards/40percentclub/6lit/config.h | 3 ++
keyboards/40percentclub/foobar/config.h | 3 ++
keyboards/diverge3/config.h | 3 ++
keyboards/divergetm2/config.h | 3 ++
keyboards/ergotravel/rev1/config.h | 3 ++
keyboards/handwired/dactyl_manuform/config.h | 3 ++
keyboards/handwired/qc60/config.h | 3 ++
keyboards/handwired/xealous/config.h | 5 +-
keyboards/iris/rev1/config.h | 3 ++
keyboards/iris/rev1_led/config.h | 3 ++
keyboards/iris/rev2/config.h | 3 ++
keyboards/iris/rev3/config.h | 3 ++
keyboards/lets_split_eh/config.h | 3 ++
keyboards/levinson/rev1/config.h | 3 ++
keyboards/levinson/rev2/config.h | 3 ++
keyboards/miniaxe/config.h | 3 ++
keyboards/nyquist/rev1/config.h | 3 ++
keyboards/nyquist/rev2/config.h | 3 ++
keyboards/nyquist/rev3/config.h | 3 ++
keyboards/quefrency/rev1/config.h | 3 ++
keyboards/qwertyydox/config.h | 3 ++
keyboards/qwertyydox/rev1/config.h | 3 ++
keyboards/redox/rev1/config.h | 3 ++
keyboards/rorschach/rev1/config.h | 3 ++
quantum/split_common/serial.c | 53 +++++++++++++++++++
quantum/split_common/serial.h | 23 ++++----
.../serial_backward_compatibility.h | 11 ++++
quantum/split_common/split_util.h | 3 ++
quantum/template/avr/config.h | 5 ++
32 files changed, 165 insertions(+), 14 deletions(-)
create mode 100644 quantum/split_common/serial_backward_compatibility.h
diff --git a/common_features.mk b/common_features.mk
index bd88e04d624dd8001801ccfb8988911e3e67c21c..97febe2e77e90a62b9dc07baf55e78db291add71 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -263,6 +263,11 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
endif
ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
+ SERIAL_BACKWARD_COMPAT := $(wildcard $(QUANTUM_DIR)/split_common/serial_backward_compatibility.h)
+ ifneq ($(SERIAL_BACKWARD_COMPAT),)
+ CONFIG_H += $(SERIAL_BACKWARD_COMPAT)
+ # $(info CONFIG_H=$(CONFIG_H))
+ endif
OPT_DEFS += -DSPLIT_KEYBOARD
QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
$(QUANTUM_DIR)/split_common/split_util.c \
diff --git a/docs/config_options.md b/docs/config_options.md
index 69fecc8b49ada27ee14dcb5f367d36d0e1946701..bea4acb010aad836e4b364002bf1c0bc87c1a45d 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -198,6 +198,9 @@ Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in yo
* `#define USE_I2C`
* For using I2C instead of Serial (defaults to serial)
+* `#define SOFT_SERIAL_PIN D0`
+ * When using serial, define this. `D0` or `D1`,`D2`,`D3`,`E6`.
+
# The `rules.mk` File
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.
diff --git a/keyboards/40percentclub/25/config.h b/keyboards/40percentclub/25/config.h
index 23b768e153d42272d78704dd5f236450e289e910..7fe59fcca091efc1a5d91be3823bc6f99c899549 100644
--- a/keyboards/40percentclub/25/config.h
+++ b/keyboards/40percentclub/25/config.h
@@ -27,6 +27,8 @@
#define DESCRIPTION A split 50 key keyboard
#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
/* Select hand configuration */
#define MASTER_LEFT
diff --git a/keyboards/40percentclub/6lit/config.h b/keyboards/40percentclub/6lit/config.h
index 8397818a61565c9f5ecfa6d595869ec6539ab0c9..940518f36566525a41298265365b9054839d21fc 100644
--- a/keyboards/40percentclub/6lit/config.h
+++ b/keyboards/40percentclub/6lit/config.h
@@ -28,6 +28,9 @@
#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Select hand configuration */
#define MASTER_LEFT
//#define MASTER_RIGHT
diff --git a/keyboards/40percentclub/foobar/config.h b/keyboards/40percentclub/foobar/config.h
index 89219c460745df2b5c12a685b9ad943a7543f220..88075c4560615ba2824a72e3e67d1af32b84c0c2 100644
--- a/keyboards/40percentclub/foobar/config.h
+++ b/keyboards/40percentclub/foobar/config.h
@@ -28,6 +28,9 @@
#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Select hand configuration */
#define MASTER_LEFT
//#define MASTER_RIGHT
diff --git a/keyboards/diverge3/config.h b/keyboards/diverge3/config.h
index 262be7b7573f7ca1a88e4d76f8700c5be63f038e..464dc835ff55c28b1e0131c36e2f75d144f3b83b 100644
--- a/keyboards/diverge3/config.h
+++ b/keyboards/diverge3/config.h
@@ -57,6 +57,9 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
diff --git a/keyboards/divergetm2/config.h b/keyboards/divergetm2/config.h
index 8bc9d2c803b924de16f3b98241a94c538f06412e..cbeeff9aa87fdb68e9d4182f35005b555cf91185 100644
--- a/keyboards/divergetm2/config.h
+++ b/keyboards/divergetm2/config.h
@@ -59,6 +59,9 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/*
* Magic Key Options
*
diff --git a/keyboards/ergotravel/rev1/config.h b/keyboards/ergotravel/rev1/config.h
index 3af1147a7ad6f4a4ad1105ca992ff033c0270a94..e6d557361c00e9aeb8398a489f044775fcd89d68 100644
--- a/keyboards/ergotravel/rev1/config.h
+++ b/keyboards/ergotravel/rev1/config.h
@@ -56,6 +56,9 @@ along with this program. If not, see .
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
#define BACKLIGHT_PIN B5
#define BACKLIGHT_LEVELS 5
diff --git a/keyboards/handwired/dactyl_manuform/config.h b/keyboards/handwired/dactyl_manuform/config.h
index 320ce3c482ddf1ff55ff6a061ecbf2fd6b92d3fd..0e6f3f98ed60224f1f2396478f9e5a897b2dc9b2 100644
--- a/keyboards/handwired/dactyl_manuform/config.h
+++ b/keyboards/handwired/dactyl_manuform/config.h
@@ -38,6 +38,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/handwired/qc60/config.h b/keyboards/handwired/qc60/config.h
index 3b6f84390bc0455aa70d920fb67cc0154ed99c4f..00d095ddf12b7dca51b642557b7cb1df0c9d7090 100644
--- a/keyboards/handwired/qc60/config.h
+++ b/keyboards/handwired/qc60/config.h
@@ -18,6 +18,9 @@
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
diff --git a/keyboards/handwired/xealous/config.h b/keyboards/handwired/xealous/config.h
index 415a0dcf5b72387bcc87da31de9f4e189a2ef12d..7bce502c1544844015e87c31f653094e4d4587e7 100644
--- a/keyboards/handwired/xealous/config.h
+++ b/keyboards/handwired/xealous/config.h
@@ -21,10 +21,13 @@ along with this program. If not, see .
/* Use I2C or Serial, not both */
-// #define USE_SERIAL
#define USE_I2C
#define SCL_CLOCK 400000UL
+// #define USE_SERIAL
+/* serial.c configuration for split keyboard */
+// #define SOFT_SERIAL_PIN D0
+
/* Select hand configuration */
#define MASTER_LEFT
diff --git a/keyboards/iris/rev1/config.h b/keyboards/iris/rev1/config.h
index 7f76df54ba1a27cb094446579ab7d8f439334d97..3b31ca0d7e06a9268cea215d16aea609cba5fce4 100644
--- a/keyboards/iris/rev1/config.h
+++ b/keyboards/iris/rev1/config.h
@@ -48,6 +48,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/iris/rev1_led/config.h b/keyboards/iris/rev1_led/config.h
index b58b11836a1e7dfb2521927cf997038670d2a256..e9739c00315bd2a78ad65a8984ab53d377304ca5 100644
--- a/keyboards/iris/rev1_led/config.h
+++ b/keyboards/iris/rev1_led/config.h
@@ -48,6 +48,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/iris/rev2/config.h b/keyboards/iris/rev2/config.h
index 266c29b9c99e67bd8675a4e1abd4f2111bc2a4a2..d43d4b1c643699d61b71c00a8e19f85bf7e068ea 100644
--- a/keyboards/iris/rev2/config.h
+++ b/keyboards/iris/rev2/config.h
@@ -48,6 +48,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/iris/rev3/config.h b/keyboards/iris/rev3/config.h
index 1032231d8982dfa011d369250e90a0ab95199b4d..5642512f39dd9d7cf899879ffd7df4786f112034 100644
--- a/keyboards/iris/rev3/config.h
+++ b/keyboards/iris/rev3/config.h
@@ -48,6 +48,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/lets_split_eh/config.h b/keyboards/lets_split_eh/config.h
index b8fe95ea2bc2c2d8015e7d74328e4f604ff4612a..abfee0eace72a38a98f1a2fef94538476eaf25b2 100644
--- a/keyboards/lets_split_eh/config.h
+++ b/keyboards/lets_split_eh/config.h
@@ -36,6 +36,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+//#define SOFT_SERIAL_PIN D0
+
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
diff --git a/keyboards/levinson/rev1/config.h b/keyboards/levinson/rev1/config.h
index 8161b4e32f9a081d22119816898149b83623d556..07ba1e221ea9a7f97a37038cb44b414a65f7c754 100644
--- a/keyboards/levinson/rev1/config.h
+++ b/keyboards/levinson/rev1/config.h
@@ -41,6 +41,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/levinson/rev2/config.h b/keyboards/levinson/rev2/config.h
index 03b98b45c1e3f54470afe43085b59262639fe8e6..a731c7195566b2fe853f28ab14278be0ea1e1997 100644
--- a/keyboards/levinson/rev2/config.h
+++ b/keyboards/levinson/rev2/config.h
@@ -41,6 +41,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/miniaxe/config.h b/keyboards/miniaxe/config.h
index 13608feab25c7e9377f2724129adc722c4f85735..2b732ca16f96b9cad2c389ac0d10506a52b3409d 100644
--- a/keyboards/miniaxe/config.h
+++ b/keyboards/miniaxe/config.h
@@ -237,6 +237,9 @@ along with this program. If not, see .
/* Serial settings */
#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
//#define EE_HANDS
#define I2C_MASTER_LEFT
//#define I2C_MASTER_RIGHT
diff --git a/keyboards/nyquist/rev1/config.h b/keyboards/nyquist/rev1/config.h
index 35fbaffb96d774b02be1f0e2a65b4ac098bd2e23..892054b7331f00cd7a18e72840959f0ca3cd29d6 100644
--- a/keyboards/nyquist/rev1/config.h
+++ b/keyboards/nyquist/rev1/config.h
@@ -46,6 +46,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/nyquist/rev2/config.h b/keyboards/nyquist/rev2/config.h
index 7dc743b275ecf618e8db076b87752ee2b8712042..21aea0aada3a65d0cca7a29ceca9fdb557020b20 100644
--- a/keyboards/nyquist/rev2/config.h
+++ b/keyboards/nyquist/rev2/config.h
@@ -43,6 +43,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/nyquist/rev3/config.h b/keyboards/nyquist/rev3/config.h
index 6c51bc9a805226e7321df1403d7fc5c78dc98bf5..8054ba79c25122aecf2382b3a5f7d9efaf66be1f 100644
--- a/keyboards/nyquist/rev3/config.h
+++ b/keyboards/nyquist/rev3/config.h
@@ -43,6 +43,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/quefrency/rev1/config.h b/keyboards/quefrency/rev1/config.h
index 1074590ff5564802f7482844e569eadc8e7ec312..88d7044864d9aaa577a4e02733e7ffa0ca28c90e 100644
--- a/keyboards/quefrency/rev1/config.h
+++ b/keyboards/quefrency/rev1/config.h
@@ -41,6 +41,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/qwertyydox/config.h b/keyboards/qwertyydox/config.h
index b22ca534e3ef5afd153aacd06636563e151e9623..a685652230a17c96badf163ec86484c7f0070278 100644
--- a/keyboards/qwertyydox/config.h
+++ b/keyboards/qwertyydox/config.h
@@ -49,6 +49,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/qwertyydox/rev1/config.h b/keyboards/qwertyydox/rev1/config.h
index 3d4c9b0d000270380f812f0bc5e0b6a6d33367f4..a2557592d3e1bcec80a94003b01f273f01da70d4 100644
--- a/keyboards/qwertyydox/rev1/config.h
+++ b/keyboards/qwertyydox/rev1/config.h
@@ -49,6 +49,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/redox/rev1/config.h b/keyboards/redox/rev1/config.h
index f4ccbd2fd52dc357edabe7b0868280348fd41be8..654a84de7470c50382336bc7629eb7907899219f 100644
--- a/keyboards/redox/rev1/config.h
+++ b/keyboards/redox/rev1/config.h
@@ -49,6 +49,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/rorschach/rev1/config.h b/keyboards/rorschach/rev1/config.h
index 1c9ef8276c9ab65175f433dee476807efd925fab..1ea6dde98d505b7bc10f52596de585943e7d3670 100644
--- a/keyboards/rorschach/rev1/config.h
+++ b/keyboards/rorschach/rev1/config.h
@@ -42,6 +42,9 @@ along with this program. If not, see .
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/quantum/split_common/serial.c b/quantum/split_common/serial.c
index 74bcbb6bf6e205e85008bf5b716f59adf6f8e103..f34f824d7d5ec5d7e3dc929204b238bb9f397555 100644
--- a/quantum/split_common/serial.c
+++ b/quantum/split_common/serial.c
@@ -14,6 +14,59 @@
#ifndef USE_I2C
+#ifndef SOFT_SERIAL_PIN
+ #error quantum/split_common/serial.c need SOFT_SERIAL_PIN define
+#endif
+
+#ifdef __AVR_ATmega32U4__
+ // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
+ #ifdef USE_I2C
+ #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
+ #error Using ATmega32U4 I2C, so can not use PD0, PD1
+ #endif
+ #endif
+
+ #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
+ #define SERIAL_PIN_DDR DDRD
+ #define SERIAL_PIN_PORT PORTD
+ #define SERIAL_PIN_INPUT PIND
+ #if SOFT_SERIAL_PIN == D0
+ #define SERIAL_PIN_MASK _BV(PD0)
+ #define EIMSK_BIT _BV(INT0)
+ #define EICRx_BIT (~(_BV(ISC00) | _BV(ISC01)))
+ #define SERIAL_PIN_INTERRUPT INT0_vect
+ #elif SOFT_SERIAL_PIN == D1
+ #define SERIAL_PIN_MASK _BV(PD1)
+ #define EIMSK_BIT _BV(INT1)
+ #define EICRx_BIT (~(_BV(ISC10) | _BV(ISC11)))
+ #define SERIAL_PIN_INTERRUPT INT1_vect
+ #elif SOFT_SERIAL_PIN == D2
+ #define SERIAL_PIN_MASK _BV(PD2)
+ #define EIMSK_BIT _BV(INT2)
+ #define EICRx_BIT (~(_BV(ISC20) | _BV(ISC21)))
+ #define SERIAL_PIN_INTERRUPT INT2_vect
+ #elif SOFT_SERIAL_PIN == D3
+ #define SERIAL_PIN_MASK _BV(PD3)
+ #define EIMSK_BIT _BV(INT3)
+ #define EICRx_BIT (~(_BV(ISC30) | _BV(ISC31)))
+ #define SERIAL_PIN_INTERRUPT INT3_vect
+ #endif
+ #elif SOFT_SERIAL_PIN == E6
+ #define SERIAL_PIN_DDR DDRE
+ #define SERIAL_PIN_PORT PORTE
+ #define SERIAL_PIN_INPUT PINE
+ #define SERIAL_PIN_MASK _BV(PE6)
+ #define EIMSK_BIT _BV(INT6)
+ #define EICRx_BIT (~(_BV(ISC60) | _BV(ISC61)))
+ #define SERIAL_PIN_INTERRUPT INT6_vect
+ #else
+ #error invalid SOFT_SERIAL_PIN value
+ #endif
+
+#else
+ #error serial.c now support ATmega32U4 only
+#endif
+
// Serial pulse period in microseconds. Its probably a bad idea to lower this
// value.
#define SERIAL_DELAY 24
diff --git a/quantum/split_common/serial.h b/quantum/split_common/serial.h
index e566eb8a06f1b28643d5b32f21dbec86a79e7c47..0b99f352d097fdaf591a660a4a83a372899b0e66 100644
--- a/quantum/split_common/serial.h
+++ b/quantum/split_common/serial.h
@@ -1,21 +1,18 @@
#ifndef MY_SERIAL_H
#define MY_SERIAL_H
-#include "config.h"
#include
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Address location defines
-#define SERIAL_BACKLIT_START 0x00
+// /////////////////////////////////////////////////////////////////
+// Need Soft Serial defines in config.h
+// /////////////////////////////////////////////////////////////////
+// ex.
+// /* Configuration of lower interface with the lower layer(hardware) of serial.c */
+// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
+//
+// /* Configuration of upper interface with the upper layer of serial.c */
+// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+// #define SERIAL_MASTER_BUFFER_LENGTH 1
// Buffers for master - slave communication
extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
diff --git a/quantum/split_common/serial_backward_compatibility.h b/quantum/split_common/serial_backward_compatibility.h
new file mode 100644
index 0000000000000000000000000000000000000000..216b6c41ffb16addb54e3f176f3a7a5e76258045
--- /dev/null
+++ b/quantum/split_common/serial_backward_compatibility.h
@@ -0,0 +1,11 @@
+/* serial.h backward compatibility */
+
+// #ifndef SOFT_SERIAL_PIN
+// #define SOFT_SERIAL_PIN D0
+// #endif
+
+#ifndef SERIAL_SLAVE_BUFFER_LENGTH
+ #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+ #define SERIAL_MASTER_BUFFER_LENGTH 1
+#endif
+
diff --git a/quantum/split_common/split_util.h b/quantum/split_common/split_util.h
index d6cf3e72a9dd6088a6ce9ae0a7bb36b4d0803136..45e8db0f2fedfbac7e646fa2540f02e4995d4250 100644
--- a/quantum/split_common/split_util.h
+++ b/quantum/split_common/split_util.h
@@ -7,6 +7,9 @@
#include
#include "eeconfig.h"
+// backlight level store index in serial_master_buffer[] for slave to read
+#define SERIAL_BACKLIT_START 0x00
+
#define SLAVE_I2C_ADDRESS 0x32
extern volatile bool isLeftHand;
diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h
index 463ddff2db32443688b8b3e103873236a324f4de..eed50e5c04eab6e5664ddf2f6679fd815ba81311 100644
--- a/quantum/template/avr/config.h
+++ b/quantum/template/avr/config.h
@@ -48,6 +48,11 @@ along with this program. If not, see .
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3