diff options
Diffstat (limited to 'quantum/split_common')
-rw-r--r-- | quantum/split_common/split_util.c | 32 | ||||
-rw-r--r-- | quantum/split_common/transport.c | 23 |
2 files changed, 36 insertions, 19 deletions
diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index da870f8775..09a307b8ed 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -11,25 +11,25 @@ # include "eeconfig.h" #endif +#if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) +#include "rgblight.h" +#endif + volatile bool isLeftHand = true; __attribute__((weak)) bool is_keyboard_left(void) { - #ifdef SPLIT_HAND_PIN + #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); - #else - #ifdef EE_HANDS - return eeprom_read_byte(EECONFIG_HANDEDNESS); - #else - #ifdef MASTER_RIGHT - return !is_keyboard_master(); - #else - return is_keyboard_master(); - #endif - #endif + #elif defined(EE_HANDS) + return eeprom_read_byte(EECONFIG_HANDEDNESS); + #elif defined(MASTER_RIGHT) + return !is_keyboard_master(); #endif + + return is_keyboard_master(); } bool is_keyboard_master(void) @@ -71,6 +71,16 @@ void matrix_setup(void) { isLeftHand = is_keyboard_left(); +#if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) + uint8_t num_rgb_leds_split[2] = RGBLED_SPLIT; + if (isLeftHand) { + rgblight_set_clipping_range(0, num_rgb_leds_split[0]); + } + else { + rgblight_set_clipping_range(num_rgb_leds_split[0], num_rgb_leds_split[1]); + } +#endif + if (is_keyboard_master()) { keyboard_master_setup(); diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c index 631d913f70..8d408f6fdc 100644 --- a/quantum/split_common/transport.c +++ b/quantum/split_common/transport.c @@ -92,12 +92,13 @@ typedef struct _Serial_m2s_buffer_t { # ifdef BACKLIGHT_ENABLE uint8_t backlight_level; # endif -# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) +# if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) rgblight_config_t rgblight_config; // not yet use // // When MCUs on both sides drive their respective RGB LED chains, // it is necessary to synchronize, so it is necessary to communicate RGB - // information. In that case, define the RGBLIGHT_SPLIT macro. + // information. In that case, define RGBLED_SPLIT with info on the number + // of LEDs on each half. // // Otherwise, if the master side MCU drives both sides RGB LED chains, // there is no need to communicate. @@ -132,15 +133,20 @@ bool transport_master(matrix_row_t matrix[]) { matrix[i] = serial_s2m_buffer.smatrix[i]; } -# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) - // Code to send RGB over serial goes here (not implemented yet) -# endif - # ifdef BACKLIGHT_ENABLE // Write backlight level for slave to read serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0; # endif +# if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) + static rgblight_config_t prev_rgb = {~0}; + uint32_t rgb = rgblight_read_dword(); + if (rgb != prev_rgb.raw) { + serial_m2s_buffer.rgblight_config.raw = rgb; + prev_rgb.raw = rgb; + } +# endif + return true; } @@ -152,8 +158,9 @@ void transport_slave(matrix_row_t matrix[]) { # ifdef BACKLIGHT_ENABLE backlight_set(serial_m2s_buffer.backlight_level); # endif -# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) -// Add serial implementation for RGB here +# if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) + // Update RGB config with the new data + rgblight_update_dword(serial_m2s_buffer.rgblight_config.raw); # endif } |