소스 검색

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
Takeshi ISHII 6 년 전
부모
커밋
155e9310ff

+ 5 - 0
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 \

+ 3 - 0
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.

+ 2 - 0
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

+ 3 - 0
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

+ 3 - 0
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

+ 3 - 0
keyboards/diverge3/config.h

@@ -57,6 +57,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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
 

+ 3 - 0
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
  *

+ 3 - 0
keyboards/ergotravel/rev1/config.h

@@ -56,6 +56,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
     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
 

+ 3 - 0
keyboards/handwired/dactyl_manuform/config.h

@@ -38,6 +38,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
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)) \

+ 4 - 1
keyboards/handwired/xealous/config.h

@@ -21,10 +21,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* 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

+ 3 - 0
keyboards/iris/rev1/config.h

@@ -48,6 +48,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/iris/rev1_led/config.h

@@ -48,6 +48,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/iris/rev2/config.h

@@ -48,6 +48,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/iris/rev3/config.h

@@ -48,6 +48,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/lets_split_eh/config.h

@@ -36,6 +36,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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)) \

+ 3 - 0
keyboards/levinson/rev1/config.h

@@ -41,6 +41,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/levinson/rev2/config.h

@@ -41,6 +41,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/miniaxe/config.h

@@ -237,6 +237,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* 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

+ 3 - 0
keyboards/nyquist/rev1/config.h

@@ -46,6 +46,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/nyquist/rev2/config.h

@@ -43,6 +43,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/nyquist/rev3/config.h

@@ -43,6 +43,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/quefrency/rev1/config.h

@@ -41,6 +41,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/qwertyydox/config.h

@@ -49,6 +49,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/qwertyydox/rev1/config.h

@@ -49,6 +49,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/redox/rev1/config.h

@@ -49,6 +49,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 3 - 0
keyboards/rorschach/rev1/config.h

@@ -42,6 +42,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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 */

+ 53 - 0
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

+ 10 - 13
quantum/split_common/serial.h

@@ -1,21 +1,18 @@
 #ifndef MY_SERIAL_H
 #define MY_SERIAL_H
 
-#include "config.h"
 #include <stdbool.h>
 
-/* 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];

+ 11 - 0
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
+

+ 3 - 0
quantum/split_common/split_util.h

@@ -7,6 +7,9 @@
 #include <stdlib.h>
 #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;

+ 5 - 0
quantum/template/avr/config.h

@@ -48,6 +48,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* 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