From 57e124c1dea83d5203b85032d078e3ff87a2bbab Mon Sep 17 00:00:00 2001 From: mtei <2170248+mtei@users.noreply.github.com> Date: Wed, 27 Mar 2019 18:46:56 +0900 Subject: [PATCH] Change split_common's transport.c I2C to use the synchronization feature of rgblight.c --- quantum/split_common/transport.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c index 6a3ebee667..1b8ca25e72 100644 --- a/quantum/split_common/transport.c +++ b/quantum/split_common/transport.c @@ -23,14 +23,16 @@ extern backlight_config_t backlight_config; typedef struct _I2C_slave_buffer_t { uint8_t backlit_level; - uint32_t rgb_config; +#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) + rgblight_syncinfo_t rgblight_sync; +#endif matrix_row_t smatrix[ROWS_PER_HAND]; } I2C_slave_buffer_t; static I2C_slave_buffer_t * const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; # define I2C_BACKLIT_START offsetof(I2C_slave_buffer_t, backlit_level) -# define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgb_config) +# define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) # define I2C_KEYMAP_START offsetof(I2C_slave_buffer_t, smatrix) # define TIMEOUT 100 @@ -54,12 +56,13 @@ bool transport_master(matrix_row_t matrix[]) { } # endif -# ifdef RGBLIGHT_ENABLE - static uint32_t prev_rgb = ~0; - uint32_t rgb = rgblight_read_dword(); - if (rgb != prev_rgb) { - if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgb, sizeof(rgb), TIMEOUT) >= 0) { - prev_rgb = rgb; +# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) + if (rgblight_get_change_flags()) { + rgblight_syncinfo_t rgblight_sync; + rgblight_get_syncinfo(&rgblight_sync); + if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, + (void *)&rgblight_sync, sizeof(rgblight_sync), TIMEOUT) >= 0) { + rgblight_clear_change_flags(); } } # endif @@ -76,9 +79,12 @@ void transport_slave(matrix_row_t matrix[]) { backlight_set(i2c_buffer->backlit_level); # endif -# ifdef RGBLIGHT_ENABLE +# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) // Update the RGB with the new data - rgblight_update_dword(i2c_buffer->rgb_config); + if (i2c_buffer->rgblight_sync.status.change_flags != 0) { + rgblight_update_sync(&i2c_buffer->rgblight_sync, false); + i2c_buffer->rgblight_sync.status.change_flags = 0; + } # endif }