From 2d14d12c7409e8de3f8d465635be115e06ba26f7 Mon Sep 17 00:00:00 2001 From: MakotoKurauchi Date: Tue, 10 Mar 2020 17:33:46 +0900 Subject: [Keyboard] Helix add split common option (#7718) * is_master, has_usb() move to rev2.[hc] * Do recent helix/rev2 changes to helix/pico as well. helix/pico/matrix.c: remove 'is_master' helix/pico/pico.c: add 'is_master' helix/pico/pico.h: add 'has_usb()' macro helix/pico/split_util.c: remove 'setup_handedness()' 'has_usb()', add 'is_helix_master()' etc * add HELIX=scan option into {rev2/pico}/local_features.mk Made DEBUG_MATRIX_SCAN_RATE easy to use. * Changed rules.mk to link "helix/local_drivers/ssd1306.c" only when OLED_ENABLE = yes. * Added option to use split_common for helix/rev2, helix/pico keyboard. how to build: ### build helix/pico (HelixPico) with helix current codes $ make helix/pico:KEY_MAP $ make helix/pico/back:KEY_MAP ### build helix/rev2 (Helix or Helix beta) with helix current codes $ make helix:KEY_MAP $ make helix/rev2/back:KEY_MAP $ make helix/rev2/under:KEY_MAP $ make helix/rev2/oled:KEY_MAP $ make helix/rev2/oled/back:KEY_MAP $ make helix/rev2/oled/under:KEY_MAP ### build helix/pico (HelixPico) with split_common codes $ make helix/pico/sc:KEY_MAP $ make helix/pico/sc/back:KEY_MAP $ make helix/pico/sc/under:KEY_MAP ### build helix/rev2 (Helix) with split_common codes $ make helix/rev2/sc:KEY_MAP $ make helix/rev2/sc/back:KEY_MAP $ make helix/rev2/sc/under:KEY_MAP $ make helix/rev2/sc/oled:KEY_MAP $ make helix/rev2/sc/oledback:KEY_MAP $ make helix/rev2/sc/oledunder:KEY_MAP * add matrix_slave_scan_user() to helix/rev2/rev2.c, helix/pico/pico.h * Changed 'helix:xulkal' to always use split_common and removed ad hoc code. Added the following line to 'helix/rev2/keymaps/xulkal/rules.mk': SPLIT_KEYBOARD = yes Removed the following ad hoc code from 'users/xulkal/custom_oled.c': #if KEYBOARD_helix_rev2 extern uint8_t is_master; bool is_keyboard_master(void) { return is_master; } #endif * add '#define DIODE_DIRECTION COL2ROW' into helix/{rev2|pico}/config.h This commit does not change the build result. * update helix readme * keyboards/helix/readme.md * keyboards/helix/pico/keymaps/default/readme.md * keyboards/helix/rev2/keymaps/default/readme.md Co-authored-by: mtei <2170248+mtei@users.noreply.github.com> --- keyboards/helix/rev2/config.h | 4 ++- keyboards/helix/rev2/keymaps/default/readme.md | 10 ++++++ keyboards/helix/rev2/keymaps/xulkal/rules.mk | 2 ++ keyboards/helix/rev2/local_features.mk | 43 +++++++++++++++++++++----- keyboards/helix/rev2/matrix.c | 5 +-- keyboards/helix/rev2/post_config.h | 7 +++++ keyboards/helix/rev2/rev2.c | 20 ++++++++++++ keyboards/helix/rev2/rev2.h | 18 +++++------ keyboards/helix/rev2/rules.mk | 16 ---------- keyboards/helix/rev2/sc/back/rules.mk | 1 + keyboards/helix/rev2/sc/oled/rules.mk | 1 + keyboards/helix/rev2/sc/oledback/rules.mk | 2 ++ keyboards/helix/rev2/sc/oledunder/rules.mk | 2 ++ keyboards/helix/rev2/sc/rules.mk | 1 + keyboards/helix/rev2/sc/under/rules.mk | 1 + keyboards/helix/rev2/split_util.c | 11 +++---- keyboards/helix/rev2/split_util.h | 2 +- 17 files changed, 100 insertions(+), 46 deletions(-) create mode 100644 keyboards/helix/rev2/post_config.h create mode 100644 keyboards/helix/rev2/sc/back/rules.mk create mode 100644 keyboards/helix/rev2/sc/oled/rules.mk create mode 100644 keyboards/helix/rev2/sc/oledback/rules.mk create mode 100644 keyboards/helix/rev2/sc/oledunder/rules.mk create mode 100644 keyboards/helix/rev2/sc/rules.mk create mode 100644 keyboards/helix/rev2/sc/under/rules.mk (limited to 'keyboards/helix/rev2') diff --git a/keyboards/helix/rev2/config.h b/keyboards/helix/rev2/config.h index fe82ce140f..467d2d66f6 100644 --- a/keyboards/helix/rev2/config.h +++ b/keyboards/helix/rev2/config.h @@ -30,7 +30,6 @@ along with this program. If not, see . #define TAPPING_TERM 100 /* Use I2C or Serial */ -#define USE_I2C #define USE_SERIAL //#define USE_MATRIX_I2C @@ -68,6 +67,9 @@ along with this program. If not, see . #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 } // #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order +/* COL2ROW, ROW2COL*/ +#define DIODE_DIRECTION COL2ROW + /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST diff --git a/keyboards/helix/rev2/keymaps/default/readme.md b/keyboards/helix/rev2/keymaps/default/readme.md index c618c47525..1237e5d5b6 100644 --- a/keyboards/helix/rev2/keymaps/default/readme.md +++ b/keyboards/helix/rev2/keymaps/default/readme.md @@ -137,6 +137,16 @@ $ make helix/rev2/oled/back:default # with oled and backlight $ make helix/rev2/oled/under:default # with oled and underglow ``` +build (experimental use of split_common) +``` +$ make helix/rev2/sc:default +$ make helix/rev2/sc/back:default +$ make helix/rev2/sc/under:default +$ make helix/rev2/sc/oled:default +$ make helix/rev2/sc/oledback:default +$ make helix/rev2/sc/oledunder:default +``` + flash to keyboard ``` $ make helix:default:flash diff --git a/keyboards/helix/rev2/keymaps/xulkal/rules.mk b/keyboards/helix/rev2/keymaps/xulkal/rules.mk index a636b2a619..03800f9bb9 100644 --- a/keyboards/helix/rev2/keymaps/xulkal/rules.mk +++ b/keyboards/helix/rev2/keymaps/xulkal/rules.mk @@ -9,3 +9,5 @@ OLED_DRIVER_ENABLE = yes OPT_DEFS += -DOLED_FONT_H=\"common/glcdfont.c\" # Xulkal specific oled define OPT_DEFS += -DOLED_90ROTATION + +SPLIT_KEYBOARD = yes diff --git a/keyboards/helix/rev2/local_features.mk b/keyboards/helix/rev2/local_features.mk index 0f4285eea9..4b120936de 100644 --- a/keyboards/helix/rev2/local_features.mk +++ b/keyboards/helix/rev2/local_features.mk @@ -10,7 +10,7 @@ define HELIX_CUSTOMISE_MSG $(info - OLED_ENABLE = $(OLED_ENABLE)) $(info - LED_BACK_ENABLE = $(LED_BACK_ENABLE)) $(info - LED_UNDERGLOW_ENABLE = $(LED_UNDERGLOW_ENABLE)) - $(info - LED_ANIMATION = $(LED_ANIMATIONS)) + $(info - LED_ANIMATIONS = $(LED_ANIMATIONS)) $(info - IOS_DEVICE_ENABLE = $(IOS_DEVICE_ENABLE)) $(info ) endef @@ -43,12 +43,35 @@ endef ifeq ($(findstring ios,$(HELIX)), ios) IOS_DEVICE_ENABLE = yes endif + ifeq ($(findstring scan,$(HELIX)), scan) + # use DEBUG_MATRIX_SCAN_RATE + # see docs/newbs_testing_debugging.md + OPT_DEFS += -DDEBUG_MATRIX_SCAN_RATE + CONSOLE_ENABLE = yes + SHOW_VERBOSE_INFO = yes + endif ifeq ($(findstring verbose,$(HELIX)), verbose) - SHOW_VERBOSE_INFO = yes + SHOW_VERBOSE_INFO = yes endif SHOW_HELIX_OPTIONS = yes endif +ifneq ($(strip $(SPLIT_KEYBOARD)), yes) + SRC += local_drivers/serial.c + KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers + + # A workaround until #7089 is merged. + # serial.c must not be compiled with the -lto option. + # The current LIB_SRC has a side effect with the -fno-lto option, so use it. + LIB_SRC += local_drivers/serial.c + + CUSTOM_MATRIX = yes + + SRC += rev2/matrix.c + SRC += rev2/split_util.c + SRC += rev2/split_scomm.c +endif + ######## # convert Helix-specific options (that represent combinations of standard options) # into QMK standard options. @@ -80,18 +103,22 @@ ifeq ($(strip $(LED_ANIMATIONS)), yes) endif ifeq ($(strip $(OLED_ENABLE)), yes) + SRC += local_drivers/i2c.c + SRC += local_drivers/ssd1306.c + KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers OPT_DEFS += -DOLED_ENABLE -endif - -ifeq ($(strip $(LOCAL_GLCDFONT)), yes) - OPT_DEFS += -DLOCAL_GLCDFONT + ifeq ($(strip $(LOCAL_GLCDFONT)), yes) + OPT_DEFS += -DLOCAL_GLCDFONT + endif endif ifneq ($(strip $(SHOW_HELIX_OPTIONS)),) $(eval $(call HELIX_CUSTOMISE_MSG)) ifneq ($(strip $(SHOW_VERBOSE_INFO)),) - $(info -- RGBLIGHT_ENABLE = $(RGBLIGHT_ENABLE)) - $(info -- OPT_DEFS = $(OPT_DEFS)) + $(info -- RGBLIGHT_ENABLE = $(RGBLIGHT_ENABLE)) + $(info -- OLED_DRIVER_ENABLE = $(OLED_DRIVER_ENABLE)) + $(info -- CONSOLE_ENABLE = $(CONSOLE_ENABLE)) + $(info -- OPT_DEFS = $(OPT_DEFS)) $(info -- LINK_TIME_OPTIMIZATION_ENABLE = $(LINK_TIME_OPTIMIZATION_ENABLE)) $(info ) endif diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c index 70a6cb0a5e..050dcac2d2 100644 --- a/keyboards/helix/rev2/matrix.c +++ b/keyboards/helix/rev2/matrix.c @@ -47,7 +47,6 @@ along with this program. If not, see . static uint8_t debouncing = DEBOUNCE; static const int ROWS_PER_HAND = MATRIX_ROWS/2; static uint8_t error_count = 0; -uint8_t is_master = 0 ; static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; @@ -111,8 +110,6 @@ void matrix_init(void) matrix_debouncing[i] = 0; } - is_master = has_usb(); - matrix_init_quantum(); } @@ -200,7 +197,7 @@ int serial_transaction(int master_changed) { uint8_t matrix_scan(void) { - if (is_master) { + if (is_helix_master()) { matrix_master_scan(); }else{ matrix_slave_scan(); diff --git a/keyboards/helix/rev2/post_config.h b/keyboards/helix/rev2/post_config.h new file mode 100644 index 0000000000..dda73d5d22 --- /dev/null +++ b/keyboards/helix/rev2/post_config.h @@ -0,0 +1,7 @@ +#pragma once + +#if defined(SPLIT_KEYBOARD) /* if use split_common */ +# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_SPLIT) +# define RGBLIGHT_SPLIT /* helix hardware need this */ +# endif +#endif diff --git a/keyboards/helix/rev2/rev2.c b/keyboards/helix/rev2/rev2.c index abaa02cdb1..12b8ae9efa 100644 --- a/keyboards/helix/rev2/rev2.c +++ b/keyboards/helix/rev2/rev2.c @@ -1,5 +1,9 @@ #include "helix.h" +// Each keymap.c should use is_keyboard_master() instead of 'is_master'. +// But keep 'is_master' for a while for backwards compatibility +// for the old keymap.c. +uint8_t is_master = false; #ifdef SSD1306OLED #include "ssd1306.h" @@ -15,7 +19,23 @@ void led_set_kb(uint8_t usb_led) { #endif void matrix_init_kb(void) { + // Each keymap.c should use is_keyboard_master() instead of is_master. + // But keep is_master for a while for backwards compatibility + // for the old keymap.c. + is_master = is_keyboard_master(); matrix_init_user(); }; +void keyboard_post_init_kb(void) { +#if defined(DEBUG_MATRIX_SCAN_RATE) + debug_enable = true; +#endif + keyboard_post_init_user(); +} + +#if defined(SPLIT_KEYBOARD) && defined(SSD1306OLED) +void matrix_slave_scan_user(void) { + matrix_scan_user(); +} +#endif diff --git a/keyboards/helix/rev2/rev2.h b/keyboards/helix/rev2/rev2.h index 4e69daef50..8b82a4a6ee 100644 --- a/keyboards/helix/rev2/rev2.h +++ b/keyboards/helix/rev2/rev2.h @@ -4,18 +4,16 @@ #include "quantum.h" -#ifdef RGBLIGHT_ENABLE -//rgb led driver -#include "ws2812.h" +#ifndef SPLIT_KEYBOARD + extern bool is_helix_master(void); + #define is_keyboard_master() is_helix_master() #endif -#ifdef USE_I2C -#include -#ifdef __AVR__ - #include - #include -#endif -#endif +// Each keymap.c should use is_keyboard_master() instead of 'is_master', 'has_usb()'. +// But keep 'is_master' for a while for backwards compatibility +// for the old keymap.c. +extern uint8_t is_master; // 'is_master' will be obsolete, it is recommended to use 'is_keyboard_master ()' instead. +#define has_usb() is_keyboard_master() #if MATRIX_ROWS == 8 // HELIX_ROWS == 4 #ifndef FLIP_HALF diff --git a/keyboards/helix/rev2/rules.mk b/keyboards/helix/rev2/rules.mk index 7357d568c6..db584c0b23 100644 --- a/keyboards/helix/rev2/rules.mk +++ b/keyboards/helix/rev2/rules.mk @@ -1,21 +1,5 @@ KEYBOARD_LOCAL_FEATURES_MK := $(dir $(lastword $(MAKEFILE_LIST)))local_features.mk -SRC += local_drivers/i2c.c -SRC += local_drivers/serial.c -SRC += local_drivers/ssd1306.c -KEYBOARD_PATHS += $(HELIX_TOP_DIR)/local_drivers - -# A workaround until #7089 is merged. -# serial.c must not be compiled with the -lto option. -# The current LIB_SRC has a side effect with the -fno-lto option, so use it. -LIB_SRC += local_drivers/serial.c - -CUSTOM_MATRIX = yes - -SRC += rev2/matrix.c -SRC += rev2/split_util.c -SRC += rev2/split_scomm.c - # Helix Spacific Build Options default values HELIX_ROWS = 5 # Helix Rows is 4 or 5 OLED_ENABLE = no # OLED_ENABLE diff --git a/keyboards/helix/rev2/sc/back/rules.mk b/keyboards/helix/rev2/sc/back/rules.mk new file mode 100644 index 0000000000..066fffb74a --- /dev/null +++ b/keyboards/helix/rev2/sc/back/rules.mk @@ -0,0 +1 @@ +LED_BACK_ENABLE = yes diff --git a/keyboards/helix/rev2/sc/oled/rules.mk b/keyboards/helix/rev2/sc/oled/rules.mk new file mode 100644 index 0000000000..dd68e9d3b0 --- /dev/null +++ b/keyboards/helix/rev2/sc/oled/rules.mk @@ -0,0 +1 @@ +OLED_ENABLE = yes diff --git a/keyboards/helix/rev2/sc/oledback/rules.mk b/keyboards/helix/rev2/sc/oledback/rules.mk new file mode 100644 index 0000000000..645984f865 --- /dev/null +++ b/keyboards/helix/rev2/sc/oledback/rules.mk @@ -0,0 +1,2 @@ +OLED_ENABLE = yes +LED_BACK_ENABLE = yes diff --git a/keyboards/helix/rev2/sc/oledunder/rules.mk b/keyboards/helix/rev2/sc/oledunder/rules.mk new file mode 100644 index 0000000000..e415cbd492 --- /dev/null +++ b/keyboards/helix/rev2/sc/oledunder/rules.mk @@ -0,0 +1,2 @@ +OLED_ENABLE = yes +LED_UNDERGLOW_ENABLE = yes diff --git a/keyboards/helix/rev2/sc/rules.mk b/keyboards/helix/rev2/sc/rules.mk new file mode 100644 index 0000000000..d38a618090 --- /dev/null +++ b/keyboards/helix/rev2/sc/rules.mk @@ -0,0 +1 @@ +SPLIT_KEYBOARD = yes diff --git a/keyboards/helix/rev2/sc/under/rules.mk b/keyboards/helix/rev2/sc/under/rules.mk new file mode 100644 index 0000000000..a37aa6fab3 --- /dev/null +++ b/keyboards/helix/rev2/sc/under/rules.mk @@ -0,0 +1 @@ +LED_UNDERGLOW_ENABLE = yes diff --git a/keyboards/helix/rev2/split_util.c b/keyboards/helix/rev2/split_util.c index 9d31d0dec3..ab40315487 100644 --- a/keyboards/helix/rev2/split_util.c +++ b/keyboards/helix/rev2/split_util.c @@ -45,7 +45,7 @@ bool waitForUsb(void) { } -__attribute__((weak)) bool is_keyboard_left(void) { +bool is_keyboard_left(void) { #if defined(SPLIT_HAND_PIN) // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand setPinInput(SPLIT_HAND_PIN); @@ -53,13 +53,13 @@ __attribute__((weak)) bool is_keyboard_left(void) { #elif defined(EE_HANDS) return eeconfig_read_handedness(); #elif defined(MASTER_RIGHT) - return !has_usb(); + return !is_helix_master(); #endif - return has_usb(); + return is_helix_master(); } -__attribute__((weak)) bool has_usb(void) { +bool is_helix_master(void) { static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN; // only check once, as this is called often @@ -100,11 +100,10 @@ static void keyboard_slave_setup(void) { void split_keyboard_setup(void) { isLeftHand = is_keyboard_left(); - if (has_usb()) { + if (is_helix_master()) { keyboard_master_setup(); } else { keyboard_slave_setup(); } sei(); } - diff --git a/keyboards/helix/rev2/split_util.h b/keyboards/helix/rev2/split_util.h index 687ca19bd3..c0ecdb0974 100644 --- a/keyboards/helix/rev2/split_util.h +++ b/keyboards/helix/rev2/split_util.h @@ -12,7 +12,7 @@ extern volatile bool isLeftHand; void matrix_slave_scan(void); void split_keyboard_setup(void); -bool has_usb(void); +bool is_helix_master(void); void matrix_master_OLED_init (void); -- cgit v1.2.3