From 2d14d12c7409e8de3f8d465635be115e06ba26f7 Mon Sep 17 00:00:00 2001 From: MakotoKurauchi Date: Tue, 10 Mar 2020 17:33:46 +0900 Subject: [PATCH] [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/local_drivers/i2c.c | 3 - keyboards/helix/pico/config.h | 4 +- .../helix/pico/keymaps/default/readme.md | 7 ++ keyboards/helix/pico/local_features.mk | 42 ++++++++-- keyboards/helix/pico/matrix.c | 10 +-- keyboards/helix/pico/pico.c | 21 +++++ keyboards/helix/pico/pico.h | 18 ++-- keyboards/helix/pico/post_config.h | 7 ++ keyboards/helix/pico/rules.mk | 15 ---- keyboards/helix/pico/sc/back/rules.mk | 1 + keyboards/helix/pico/sc/rules.mk | 1 + keyboards/helix/pico/sc/under/rules.mk | 1 + keyboards/helix/pico/split_util.c | 82 +++++++++++++------ keyboards/helix/pico/split_util.h | 2 +- keyboards/helix/readme.md | 6 +- keyboards/helix/rev2/config.h | 4 +- .../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 +- users/xulkal/custom_oled.c | 5 -- 33 files changed, 248 insertions(+), 123 deletions(-) create mode 100644 keyboards/helix/pico/post_config.h create mode 100644 keyboards/helix/pico/sc/back/rules.mk create mode 100644 keyboards/helix/pico/sc/rules.mk create mode 100644 keyboards/helix/pico/sc/under/rules.mk 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 diff --git a/keyboards/helix/local_drivers/i2c.c b/keyboards/helix/local_drivers/i2c.c index 4bee5c639..9221429e9 100644 --- a/keyboards/helix/local_drivers/i2c.c +++ b/keyboards/helix/local_drivers/i2c.c @@ -6,8 +6,6 @@ #include #include "i2c.h" -#ifdef USE_I2C - // Limits the amount of we wait for any one i2c transaction. // Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is // 9 bits, a single transaction will take around 90μs to complete. @@ -159,4 +157,3 @@ ISR(TWI_vect) { // Reset everything, so we are ready for the next TWI interrupt TWCR |= (1<. #define TAPPING_TERM 100 /* Use I2C or Serial */ -#define USE_I2C #define USE_SERIAL //#define USE_MATRIX_I2C @@ -60,6 +59,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/pico/keymaps/default/readme.md b/keyboards/helix/pico/keymaps/default/readme.md index 9013e3128..3c097247e 100644 --- a/keyboards/helix/pico/keymaps/default/readme.md +++ b/keyboards/helix/pico/keymaps/default/readme.md @@ -120,6 +120,13 @@ $ make HELIX=no_ani helix/pico/back:default # with backlight without animation $ make helix/pico/under:default # with underglow ``` +build (experimental use of split_common) +``` +$ make helix/pico/sc:default +$ make helix/pico/sc/back:default +$ make helix/pico/sc/under:default +``` + flash to keyboard ``` $ make helix/pico:default:flash diff --git a/keyboards/helix/pico/local_features.mk b/keyboards/helix/pico/local_features.mk index 47b928647..0277a3d22 100644 --- a/keyboards/helix/pico/local_features.mk +++ b/keyboards/helix/pico/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,34 @@ 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 += pico/matrix.c + SRC += pico/split_util.c +endif + ######## # convert Helix-specific options (that represent combinations of standard options) # into QMK standard options. @@ -73,11 +95,13 @@ 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 ifeq ($(strip $(AUDIO_ENABLE)),yes) @@ -92,8 +116,10 @@ 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/pico/matrix.c b/keyboards/helix/pico/matrix.c index c2940e3b3..a537ef03c 100644 --- a/keyboards/helix/pico/matrix.c +++ b/keyboards/helix/pico/matrix.c @@ -46,7 +46,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; @@ -94,9 +93,8 @@ uint8_t matrix_cols(void) void matrix_init(void) { - debug_enable = true; - debug_matrix = true; - debug_mouse = true; + split_keyboard_setup(); + // initialize row and col unselect_rows(); init_cols(); @@ -111,8 +109,6 @@ void matrix_init(void) matrix_debouncing[i] = 0; } - is_master = has_usb(); - matrix_init_quantum(); } @@ -197,7 +193,7 @@ int serial_transaction(void) { uint8_t matrix_scan(void) { - if (is_master) { + if (is_helix_master()) { matrix_master_scan(); }else{ matrix_slave_scan(); diff --git a/keyboards/helix/pico/pico.c b/keyboards/helix/pico/pico.c index bb8ba9ca2..12b8ae9ef 100644 --- a/keyboards/helix/pico/pico.c +++ b/keyboards/helix/pico/pico.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,6 +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/pico/pico.h b/keyboards/helix/pico/pico.h index 4360be2a9..303fe315e 100644 --- a/keyboards/helix/pico/pico.h +++ b/keyboards/helix/pico/pico.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() #ifndef FLIP_HALF // Standard Keymap diff --git a/keyboards/helix/pico/post_config.h b/keyboards/helix/pico/post_config.h new file mode 100644 index 000000000..dda73d5d2 --- /dev/null +++ b/keyboards/helix/pico/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/pico/rules.mk b/keyboards/helix/pico/rules.mk index d3ad20cca..cb9a70e00 100644 --- a/keyboards/helix/pico/rules.mk +++ b/keyboards/helix/pico/rules.mk @@ -1,20 +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 += pico/matrix.c -SRC += pico/split_util.c - # Helix Spacific Build Options default values OLED_ENABLE = no # OLED_ENABLE LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" diff --git a/keyboards/helix/pico/sc/back/rules.mk b/keyboards/helix/pico/sc/back/rules.mk new file mode 100644 index 000000000..066fffb74 --- /dev/null +++ b/keyboards/helix/pico/sc/back/rules.mk @@ -0,0 +1 @@ +LED_BACK_ENABLE = yes diff --git a/keyboards/helix/pico/sc/rules.mk b/keyboards/helix/pico/sc/rules.mk new file mode 100644 index 000000000..d38a61809 --- /dev/null +++ b/keyboards/helix/pico/sc/rules.mk @@ -0,0 +1 @@ +SPLIT_KEYBOARD = yes diff --git a/keyboards/helix/pico/sc/under/rules.mk b/keyboards/helix/pico/sc/under/rules.mk new file mode 100644 index 000000000..a37aa6fab --- /dev/null +++ b/keyboards/helix/pico/sc/under/rules.mk @@ -0,0 +1 @@ +LED_UNDERGLOW_ENABLE = yes diff --git a/keyboards/helix/pico/split_util.c b/keyboards/helix/pico/split_util.c index beb39fa00..c77e63f33 100644 --- a/keyboards/helix/pico/split_util.c +++ b/keyboards/helix/pico/split_util.c @@ -7,6 +7,7 @@ #include "split_util.h" #include "matrix.h" #include "keyboard.h" +#include "wait.h" #ifdef USE_MATRIX_I2C # include "i2c.h" @@ -14,21 +15,65 @@ # include "serial.h" #endif +#ifdef EE_HANDS +# include "eeconfig.h" +#endif + +#ifndef SPLIT_USB_TIMEOUT + #define SPLIT_USB_TIMEOUT 2500 +#endif + volatile bool isLeftHand = true; -static void setup_handedness(void) { - #ifdef EE_HANDS - isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); - #else - // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c - #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) - isLeftHand = !has_usb(); - #else - isLeftHand = has_usb(); - #endif - #endif +bool waitForUsb(void) { + for (uint8_t i = 0; i < (SPLIT_USB_TIMEOUT / 100); i++) { + // This will return true of a USB connection has been established + if (UDADDR & _BV(ADDEN)) { + return true; + } + wait_ms(100); + } + + // Avoid NO_USB_STARTUP_CHECK - Disable USB as the previous checks seem to enable it somehow + (USBCON &= ~(_BV(USBE) | _BV(OTGPADE))); + + return false; } +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); + return readPin(SPLIT_HAND_PIN); +#elif defined(EE_HANDS) + return eeconfig_read_handedness(); +#elif defined(MASTER_RIGHT) + return !is_helix_master(); +#endif + + return is_helix_master(); +} + +bool is_helix_master(void) { + static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN; + + // only check once, as this is called often + if (usbstate == UNKNOWN) { +#if defined(SPLIT_USB_DETECT) + usbstate = waitForUsb() ? MASTER : SLAVE; +#elif defined(__AVR__) + USBCON |= (1 << OTGPADE); // enables VBUS pad + wait_us(5); + + usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE; // checks state of VBUS +#else + usbstate = MASTER; +#endif + } + + return (usbstate == MASTER); + } + static void keyboard_master_setup(void) { #ifdef USE_MATRIX_I2C @@ -47,24 +92,13 @@ static void keyboard_slave_setup(void) { #endif } -bool has_usb(void) { - USBCON |= (1 << OTGPADE); //enables VBUS pad - _delay_us(5); - return (USBSTA & (1<. #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 c618c4752..1237e5d5b 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 a636b2a61..03800f9bb 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 0f4285eea..4b120936d 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 70a6cb0a5..050dcac2d 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 000000000..dda73d5d2 --- /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 abaa02cdb..12b8ae9ef 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 4e69daef5..8b82a4a6e 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 7357d568c..db584c0b2 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 000000000..066fffb74 --- /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 000000000..dd68e9d3b --- /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 000000000..645984f86 --- /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 000000000..e415cbd49 --- /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 000000000..d38a61809 --- /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 000000000..a37aa6fab --- /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 9d31d0dec..ab4031548 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 687ca19bd..c0ecdb097 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); diff --git a/users/xulkal/custom_oled.c b/users/xulkal/custom_oled.c index 448e6ca10..4ed2b9a0b 100644 --- a/users/xulkal/custom_oled.c +++ b/users/xulkal/custom_oled.c @@ -7,11 +7,6 @@ rgblight_config_t rgblight_config; #endif -#if KEYBOARD_helix_rev2 -extern uint8_t is_master; -bool is_keyboard_master(void) { return is_master; } -#endif - static void render_logo(void) { static const char PROGMEM font_logo[] = {