aboutsummaryrefslogtreecommitdiff
path: root/quantum/split_common
diff options
context:
space:
mode:
authorXScorpion2 <rcalt2vt@gmail.com>2021-03-02 14:32:15 -0600
committerGitHub <noreply@github.com>2021-03-03 07:32:15 +1100
commitcde2859a6591b1274da20978bd158f20229faa88 (patch)
tree181d3a637b661b0683282e412672e73efbf10f37 /quantum/split_common
parent967d7c47dc90c2cc087fb68acb328cc6e3fca76a (diff)
downloadqmk_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.c35
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
59static I2C_slave_buffer_t *const i2c_buffer = (I2C_slave_buffer_t *)i2c_slave_reg; 67static 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
191void transport_master_init(void) { i2c_init(); } 211void 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