diff options
author | XScorpion2 <rcalt2vt@gmail.com> | 2021-03-02 14:32:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-03 07:32:15 +1100 |
commit | cde2859a6591b1274da20978bd158f20229faa88 (patch) | |
tree | 181d3a637b661b0683282e412672e73efbf10f37 /quantum/split_common | |
parent | 967d7c47dc90c2cc087fb68acb328cc6e3fca76a (diff) | |
download | qmk_firmware-cde2859a6591b1274da20978bd158f20229faa88.tar.gz qmk_firmware-cde2859a6591b1274da20978bd158f20229faa88.zip |
Split RGB Matrix (#11055)
* Split RGB Matrix
* Suspend State sync for rgb matrix
Diffstat (limited to 'quantum/split_common')
-rw-r--r-- | quantum/split_common/transport.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c index 61b61ea08..daa60bb73 100644 --- a/quantum/split_common/transport.c +++ b/quantum/split_common/transport.c | |||
@@ -22,6 +22,10 @@ static pin_t encoders_pad[] = ENCODERS_PAD_A; | |||
22 | # define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t)) | 22 | # define NUMBER_OF_ENCODERS (sizeof(encoders_pad) / sizeof(pin_t)) |
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
26 | # include "rgb_matrix.h" | ||
27 | #endif | ||
28 | |||
25 | #if defined(USE_I2C) | 29 | #if defined(USE_I2C) |
26 | 30 | ||
27 | # include "i2c_master.h" | 31 | # include "i2c_master.h" |
@@ -54,6 +58,10 @@ typedef struct _I2C_slave_buffer_t { | |||
54 | # ifdef WPM_ENABLE | 58 | # ifdef WPM_ENABLE |
55 | uint8_t current_wpm; | 59 | uint8_t current_wpm; |
56 | # endif | 60 | # endif |
61 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
62 | rgb_config_t rgb_matrix; | ||
63 | bool rgb_suspend_state; | ||
64 | # endif | ||
57 | } I2C_slave_buffer_t; | 65 | } I2C_slave_buffer_t; |
58 | 66 | ||
59 | static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; | 67 | static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; |
@@ -68,6 +76,8 @@ static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_re | |||
68 | # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) | 76 | # define I2C_RGB_START offsetof(I2C_slave_buffer_t, rgblight_sync) |
69 | # define I2C_ENCODER_START offsetof(I2C_slave_buffer_t, encoder_state) | 77 | # define I2C_ENCODER_START offsetof(I2C_slave_buffer_t, encoder_state) |
70 | # define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) | 78 | # define I2C_WPM_START offsetof(I2C_slave_buffer_t, current_wpm) |
79 | # define I2C_RGB_MATRIX_START offsetof(I2C_slave_buffer_t, rgb_matrix) | ||
80 | # define I2C_RGB_SUSPEND_START offsetof(I2C_slave_buffer_t, rgb_suspend_state) | ||
71 | 81 | ||
72 | # define TIMEOUT 100 | 82 | # define TIMEOUT 100 |
73 | 83 | ||
@@ -141,6 +151,11 @@ bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) | |||
141 | # endif | 151 | # endif |
142 | # endif | 152 | # endif |
143 | 153 | ||
154 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
155 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_MATRIX_START, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix), TIMEOUT); | ||
156 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_SUSPEND_START, (void *)g_suspend_state, sizeof(i2c_buffer->rgb_suspend_state), TIMEOUT); | ||
157 | # endif | ||
158 | |||
144 | # ifndef DISABLE_SYNC_TIMER | 159 | # ifndef DISABLE_SYNC_TIMER |
145 | i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; | 160 | i2c_buffer->sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; |
146 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT); | 161 | i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_SYNC_TIME_START, (void *)&i2c_buffer->sync_timer, sizeof(i2c_buffer->sync_timer), TIMEOUT); |
@@ -186,6 +201,11 @@ void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) | |||
186 | set_oneshot_mods(i2c_buffer->oneshot_mods); | 201 | set_oneshot_mods(i2c_buffer->oneshot_mods); |
187 | # endif | 202 | # endif |
188 | # endif | 203 | # endif |
204 | |||
205 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
206 | memcpy((void*)i2c_buffer->rgb_matrix, (void *)rgb_matrix_config, sizeof(i2c_buffer->rgb_matrix)); | ||
207 | memcpy((void*)i2c_buffer->rgb_suspend_state, (void *)g_suspend_state, sizeof(i2c_buffer->rgb_suspend_state)); | ||
208 | # endif | ||
189 | } | 209 | } |
190 | 210 | ||
191 | void transport_master_init(void) { i2c_init(); } | 211 | void transport_master_init(void) { i2c_init(); } |
@@ -226,6 +246,10 @@ typedef struct _Serial_m2s_buffer_t { | |||
226 | # ifdef WPM_ENABLE | 246 | # ifdef WPM_ENABLE |
227 | uint8_t current_wpm; | 247 | uint8_t current_wpm; |
228 | # endif | 248 | # endif |
249 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
250 | rgb_config_t rgb_matrix; | ||
251 | bool rgb_suspend_state; | ||
252 | # endif | ||
229 | } Serial_m2s_buffer_t; | 253 | } Serial_m2s_buffer_t; |
230 | 254 | ||
231 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) | 255 | # if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT) |
@@ -343,6 +367,12 @@ bool transport_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) | |||
343 | serial_m2s_buffer.oneshot_mods = get_oneshot_mods(); | 367 | serial_m2s_buffer.oneshot_mods = get_oneshot_mods(); |
344 | # endif | 368 | # endif |
345 | # endif | 369 | # endif |
370 | |||
371 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
372 | serial_m2s_buffer.rgb_matrix = rgb_matrix_config; | ||
373 | serial_m2s_buffer.rgb_suspend_state = g_suspend_state; | ||
374 | # endif | ||
375 | |||
346 | # ifndef DISABLE_SYNC_TIMER | 376 | # ifndef DISABLE_SYNC_TIMER |
347 | serial_m2s_buffer.sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; | 377 | serial_m2s_buffer.sync_timer = sync_timer_read32() + SYNC_TIMER_OFFSET; |
348 | # endif | 378 | # endif |
@@ -381,6 +411,11 @@ void transport_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) | |||
381 | set_oneshot_mods(serial_m2s_buffer.oneshot_mods); | 411 | set_oneshot_mods(serial_m2s_buffer.oneshot_mods); |
382 | # endif | 412 | # endif |
383 | # endif | 413 | # endif |
414 | |||
415 | # if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_SPLIT) | ||
416 | rgb_matrix_config = serial_m2s_buffer.rgb_matrix; | ||
417 | g_suspend_state = serial_m2s_buffer.rgb_suspend_state; | ||
418 | # endif | ||
384 | } | 419 | } |
385 | 420 | ||
386 | #endif | 421 | #endif |