aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/lets_split_eh/eh/config.h2
-rw-r--r--quantum/split_common/matrix.c10
-rw-r--r--quantum/split_common/serial.h3
-rw-r--r--quantum/split_common/split_util.c53
4 files changed, 46 insertions, 22 deletions
diff --git a/keyboards/lets_split_eh/eh/config.h b/keyboards/lets_split_eh/eh/config.h
index 5651ddd8b..59afb39c0 100644
--- a/keyboards/lets_split_eh/eh/config.h
+++ b/keyboards/lets_split_eh/eh/config.h
@@ -21,6 +21,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
21 21
22// To let configuration know this is of type EH, which will force I2C irregardless of user config 22// To let configuration know this is of type EH, which will force I2C irregardless of user config
23#define EH 23#define EH
24// The 'EH' only uses I2C
25#define USE_I2C
24 26
25#include "config_common.h" 27#include "config_common.h"
26 28
diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c
index 071f0481a..5e5475f44 100644
--- a/quantum/split_common/matrix.c
+++ b/quantum/split_common/matrix.c
@@ -286,6 +286,16 @@ int serial_transaction(void) {
286 for (int i = 0; i < ROWS_PER_HAND; ++i) { 286 for (int i = 0; i < ROWS_PER_HAND; ++i) {
287 matrix[slaveOffset+i] = serial_slave_buffer[i]; 287 matrix[slaveOffset+i] = serial_slave_buffer[i];
288 } 288 }
289
290 #ifdef RGBLIGHT_ENABLE
291 // Code to send RGB over serial goes here (not implemented yet)
292 #endif
293
294 #ifdef BACKLIGHT_ENABLE
295 // Write backlight level for slave to read
296 serial_master_buffer[SERIAL_BACKLIT_START] = backlight_config.enable ? backlight_config.level : 0;
297 #endif
298
289 return 0; 299 return 0;
290} 300}
291#endif 301#endif
diff --git a/quantum/split_common/serial.h b/quantum/split_common/serial.h
index 15fe4db7b..e566eb8a0 100644
--- a/quantum/split_common/serial.h
+++ b/quantum/split_common/serial.h
@@ -14,6 +14,9 @@
14#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 14#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
15#define SERIAL_MASTER_BUFFER_LENGTH 1 15#define SERIAL_MASTER_BUFFER_LENGTH 1
16 16
17// Address location defines
18#define SERIAL_BACKLIT_START 0x00
19
17// Buffers for master - slave communication 20// Buffers for master - slave communication
18extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; 21extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
19extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; 22extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c
index 340a63137..13b09d5b8 100644
--- a/quantum/split_common/split_util.c
+++ b/quantum/split_common/split_util.c
@@ -101,35 +101,44 @@ void keyboard_slave_loop(void) {
101 #endif 101 #endif
102 102
103 while (1) { 103 while (1) {
104 matrix_slave_scan(); 104 // Matrix Slave Scan
105 105 matrix_slave_scan();
106 // read backlight info 106
107 // Read Backlight Info
107 #ifdef BACKLIGHT_ENABLE 108 #ifdef BACKLIGHT_ENABLE
108 if (BACKLIT_DIRTY) { 109 if (BACKLIT_DIRTY) {
109 backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]); 110 #ifdef USE_I2C
111 backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]);
112 #else // USE_SERIAL
113 backlight_set(serial_master_buffer[SERIAL_BACKLIT_START]);
114 #endif
110 BACKLIT_DIRTY = false; 115 BACKLIT_DIRTY = false;
111 } 116 }
112 #endif 117 #endif
118 // Read RGB Info
113 #ifdef RGBLIGHT_ENABLE 119 #ifdef RGBLIGHT_ENABLE
114 if (RGB_DIRTY) { 120 #ifdef USE_I2C
115 cli(); 121 if (RGB_DIRTY) {
116 uint32_t dword; 122 // Disable interupts (RGB data is big)
117 123 cli();
118 /*dword = i2c_slave_buffer[I2C_RGB_START + 3]; 124 // Create new DWORD for RGB data
119 dword = (dword << 8) + i2c_slave_buffer[I2C_RGB_START + 2]; 125 uint32_t dword;
120 dword = (dword << 8) + i2c_slave_buffer[I2C_RGB_START + 1]; 126
121 dword = (dword << 8) + i2c_slave_buffer[I2C_RGB_START];*/ 127 // Fill the new DWORD with the data that was sent over
122 128 uint8_t *dword_dat = (uint8_t *)(&dword);
123 129 for (int i = 0; i < 4; i++) {
124 uint8_t *dword_dat = (uint8_t *)(&dword); 130 dword_dat[i] = i2c_slave_buffer[I2C_RGB_START+i];
125 for (int i = 0; i < 4; i++) { 131 }
126 dword_dat[i] = i2c_slave_buffer[I2C_RGB_START+i]; 132
133 // Update the RGB now with the new data and set RGB_DIRTY to false
134 rgblight_update_dword(dword);
135 RGB_DIRTY = false;
136 // Re-enable interupts now that RGB is set
137 sei();
127 } 138 }
128 139 #else // USE_SERIAL
129 rgblight_update_dword(dword); 140 // Add serial implementation for RGB here
130 RGB_DIRTY = false; 141 #endif
131 sei();
132 }
133 #endif 142 #endif
134 } 143 }
135} 144}