~ruther/qmk_firmware

155e9310ff685f557287749bef2e02510538a6d9 — Takeshi ISHII 6 years ago 9739d6b
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
M common_features.mk => common_features.mk +5 -0
@@ 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 \

M docs/config_options.md => docs/config_options.md +3 -0
@@ 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.

M keyboards/40percentclub/25/config.h => keyboards/40percentclub/25/config.h +2 -0
@@ 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

M keyboards/40percentclub/6lit/config.h => keyboards/40percentclub/6lit/config.h +3 -0
@@ 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

M keyboards/40percentclub/foobar/config.h => keyboards/40percentclub/foobar/config.h +3 -0
@@ 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

M keyboards/diverge3/config.h => keyboards/diverge3/config.h +3 -0
@@ 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


M keyboards/divergetm2/config.h => keyboards/divergetm2/config.h +3 -0
@@ 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
 *

M keyboards/ergotravel/rev1/config.h => keyboards/ergotravel/rev1/config.h +3 -0
@@ 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


M keyboards/handwired/dactyl_manuform/config.h => keyboards/handwired/dactyl_manuform/config.h +3 -0
@@ 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 */

M keyboards/handwired/qc60/config.h => keyboards/handwired/qc60/config.h +3 -0
@@ 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)) \

M keyboards/handwired/xealous/config.h => keyboards/handwired/xealous/config.h +4 -1
@@ 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

M keyboards/iris/rev1/config.h => keyboards/iris/rev1/config.h +3 -0
@@ 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 */

M keyboards/iris/rev1_led/config.h => keyboards/iris/rev1_led/config.h +3 -0
@@ 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 */

M keyboards/iris/rev2/config.h => keyboards/iris/rev2/config.h +3 -0
@@ 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 */

M keyboards/iris/rev3/config.h => keyboards/iris/rev3/config.h +3 -0
@@ 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 */

M keyboards/lets_split_eh/config.h => keyboards/lets_split_eh/config.h +3 -0
@@ 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)) \

M keyboards/levinson/rev1/config.h => keyboards/levinson/rev1/config.h +3 -0
@@ 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 */

M keyboards/levinson/rev2/config.h => keyboards/levinson/rev2/config.h +3 -0
@@ 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 */

M keyboards/miniaxe/config.h => keyboards/miniaxe/config.h +3 -0
@@ 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

M keyboards/nyquist/rev1/config.h => keyboards/nyquist/rev1/config.h +3 -0
@@ 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 */

M keyboards/nyquist/rev2/config.h => keyboards/nyquist/rev2/config.h +3 -0
@@ 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 */

M keyboards/nyquist/rev3/config.h => keyboards/nyquist/rev3/config.h +3 -0
@@ 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 */

M keyboards/quefrency/rev1/config.h => keyboards/quefrency/rev1/config.h +3 -0
@@ 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 */

M keyboards/qwertyydox/config.h => keyboards/qwertyydox/config.h +3 -0
@@ 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 */

M keyboards/qwertyydox/rev1/config.h => keyboards/qwertyydox/rev1/config.h +3 -0
@@ 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 */

M keyboards/redox/rev1/config.h => keyboards/redox/rev1/config.h +3 -0
@@ 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 */

M keyboards/rorschach/rev1/config.h => keyboards/rorschach/rev1/config.h +3 -0
@@ 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 */

M quantum/split_common/serial.c => quantum/split_common/serial.c +53 -0
@@ 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

M quantum/split_common/serial.h => quantum/split_common/serial.h +10 -13
@@ 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];

A quantum/split_common/serial_backward_compatibility.h => quantum/split_common/serial_backward_compatibility.h +11 -0
@@ 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


M quantum/split_common/split_util.h => quantum/split_common/split_util.h +3 -0
@@ 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;

M quantum/template/avr/config.h => quantum/template/avr/config.h +5 -0
@@ 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