aboutsummaryrefslogtreecommitdiff
path: root/keyboards/helix/rev2/matrix.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/helix/rev2/matrix.c')
-rw-r--r--keyboards/helix/rev2/matrix.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c
index 8a1ce3af1..322959dbb 100644
--- a/keyboards/helix/rev2/matrix.c
+++ b/keyboards/helix/rev2/matrix.c
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */ 20 */
21#include <stdint.h> 21#include <stdint.h>
22#include <stdbool.h> 22#include <stdbool.h>
23#include <string.h>
23#include <avr/io.h> 24#include <avr/io.h>
24#include <avr/wdt.h> 25#include <avr/wdt.h>
25#include <avr/interrupt.h> 26#include <avr/interrupt.h>
@@ -34,7 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
34#ifdef USE_MATRIX_I2C 35#ifdef USE_MATRIX_I2C
35# include "i2c.h" 36# include "i2c.h"
36#else // USE_SERIAL 37#else // USE_SERIAL
37# include "serial.h" 38# include "split_scomm.h"
38#endif 39#endif
39 40
40#ifndef DEBOUNCE 41#ifndef DEBOUNCE
@@ -102,6 +103,8 @@ void matrix_init(void)
102 init_cols(); 103 init_cols();
103 104
104 TX_RX_LED_INIT; 105 TX_RX_LED_INIT;
106 TXLED0;
107 RXLED0;
105 108
106 // initialize matrix state: all keys off 109 // initialize matrix state: all keys off
107 for (uint8_t i=0; i < MATRIX_ROWS; i++) { 110 for (uint8_t i=0; i < MATRIX_ROWS; i++) {
@@ -178,17 +181,20 @@ i2c_error: // the cable is disconnceted, or something else went wrong
178 181
179#else // USE_SERIAL 182#else // USE_SERIAL
180 183
181int serial_transaction(void) { 184int serial_transaction(int master_changed) {
182 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; 185 int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
186#ifdef SERIAL_USE_MULTI_TRANSACTION
187 int ret=serial_update_buffers(master_changed);
188#else
183 int ret=serial_update_buffers(); 189 int ret=serial_update_buffers();
190#endif
184 if (ret ) { 191 if (ret ) {
185 if(ret==2)RXLED1; 192 if(ret==2) RXLED1;
186 return 1; 193 return 1;
187 } 194 }
188RXLED0; 195 RXLED0;
189 for (int i = 0; i < ROWS_PER_HAND; ++i) { 196 memcpy(&matrix[slaveOffset],
190 matrix[slaveOffset+i] = serial_slave_buffer[i]; 197 (void *)serial_slave_buffer, sizeof(serial_slave_buffer));
191 }
192 return 0; 198 return 0;
193} 199}
194#endif 200#endif
@@ -199,19 +205,9 @@ uint8_t matrix_scan(void)
199 matrix_master_scan(); 205 matrix_master_scan();
200 }else{ 206 }else{
201 matrix_slave_scan(); 207 matrix_slave_scan();
202 208 int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
203// if(serial_slave_DATA_CORRUPT()){ 209 memcpy(&matrix[offset],
204// TXLED0; 210 (void *)serial_master_buffer, sizeof(serial_master_buffer));
205 int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
206
207 for (int i = 0; i < ROWS_PER_HAND; ++i) {
208 matrix[offset+i] = serial_master_buffer[i];
209 }
210
211// }else{
212// TXLED1;
213// }
214
215 matrix_scan_quantum(); 211 matrix_scan_quantum();
216 } 212 }
217 return 1; 213 return 1;
@@ -221,6 +217,7 @@ uint8_t matrix_scan(void)
221uint8_t matrix_master_scan(void) { 217uint8_t matrix_master_scan(void) {
222 218
223 int ret = _matrix_scan(); 219 int ret = _matrix_scan();
220 int mchanged = 1;
224 221
225#ifndef KEYBOARD_helix_rev1 222#ifndef KEYBOARD_helix_rev1
226 int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; 223 int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
@@ -231,16 +228,19 @@ uint8_t matrix_master_scan(void) {
231// i2c_slave_buffer[i] = matrix[offset+i]; 228// i2c_slave_buffer[i] = matrix[offset+i];
232// } 229// }
233#else // USE_SERIAL 230#else // USE_SERIAL
234 for (int i = 0; i < ROWS_PER_HAND; ++i) { 231 #ifdef SERIAL_USE_MULTI_TRANSACTION
235 serial_master_buffer[i] = matrix[offset+i]; 232 mchanged = memcmp((void *)serial_master_buffer,
236 } 233 &matrix[offset], sizeof(serial_master_buffer));
234 #endif
235 memcpy((void *)serial_master_buffer,
236 &matrix[offset], sizeof(serial_master_buffer));
237#endif 237#endif
238#endif 238#endif
239 239
240#ifdef USE_MATRIX_I2C 240#ifdef USE_MATRIX_I2C
241 if( i2c_transaction() ) { 241 if( i2c_transaction() ) {
242#else // USE_SERIAL 242#else // USE_SERIAL
243 if( serial_transaction() ) { 243 if( serial_transaction(mchanged) ) {
244#endif 244#endif
245 // turn on the indicator led when halves are disconnected 245 // turn on the indicator led when halves are disconnected
246 TXLED1; 246 TXLED1;
@@ -274,9 +274,19 @@ void matrix_slave_scan(void) {
274 i2c_slave_buffer[i] = matrix[offset+i]; 274 i2c_slave_buffer[i] = matrix[offset+i];
275 } 275 }
276#else // USE_SERIAL 276#else // USE_SERIAL
277 #ifdef SERIAL_USE_MULTI_TRANSACTION
278 int change = 0;
279 #endif
277 for (int i = 0; i < ROWS_PER_HAND; ++i) { 280 for (int i = 0; i < ROWS_PER_HAND; ++i) {
281 #ifdef SERIAL_USE_MULTI_TRANSACTION
282 if( serial_slave_buffer[i] != matrix[offset+i] )
283 change = 1;
284 #endif
278 serial_slave_buffer[i] = matrix[offset+i]; 285 serial_slave_buffer[i] = matrix[offset+i];
279 } 286 }
287 #ifdef SERIAL_USE_MULTI_TRANSACTION
288 slave_buffer_change_count += change;
289 #endif
280#endif 290#endif
281} 291}
282 292