Keyboard: Improvement of crkbd communication functions (based on helix-keyboard) (#3798)
* improvement of crkbd communication functions (based on helix-keyboard) * Removed unnecessary code. * Changed read restriction from #define to #pragma once. * Changed from sizeof to defined size. * moved lib folder to crkbdroot. removed warning of ws2812.d
This commit is contained in:
parent
fa1ee47cf2
commit
35efcc9f39
31 changed files with 582 additions and 235 deletions
|
@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/wdt.h>
|
||||
#include <avr/interrupt.h>
|
||||
|
@ -30,12 +31,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "config.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
#else // USE_SERIAL
|
||||
# include "serial.h"
|
||||
# include "split_scomm.h"
|
||||
#endif
|
||||
|
||||
#ifndef DEBOUNCE
|
||||
|
@ -103,6 +103,8 @@ void matrix_init(void)
|
|||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
|
@ -179,17 +181,20 @@ i2c_error: // the cable is disconnceted, or something else went wrong
|
|||
|
||||
#else // USE_SERIAL
|
||||
|
||||
int serial_transaction(void) {
|
||||
int serial_transaction(int master_changed) {
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||
int ret=serial_update_buffers(master_changed);
|
||||
#else
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2)RXLED1;
|
||||
if(ret==2) RXLED1;
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||
}
|
||||
RXLED0;
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -200,19 +205,9 @@ uint8_t matrix_scan(void)
|
|||
matrix_master_scan();
|
||||
}else{
|
||||
matrix_slave_scan();
|
||||
|
||||
// if(serial_slave_DATA_CORRUPT()){
|
||||
// TXLED0;
|
||||
int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
|
||||
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[offset+i] = serial_master_buffer[i];
|
||||
}
|
||||
|
||||
// }else{
|
||||
// TXLED1;
|
||||
// }
|
||||
|
||||
int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
|
||||
memcpy(&matrix[offset],
|
||||
(void *)serial_master_buffer, SERIAL_MASTER_BUFFER_LENGTH);
|
||||
matrix_scan_quantum();
|
||||
}
|
||||
return 1;
|
||||
|
@ -222,6 +217,7 @@ uint8_t matrix_scan(void)
|
|||
uint8_t matrix_master_scan(void) {
|
||||
|
||||
int ret = _matrix_scan();
|
||||
int mchanged = 1;
|
||||
|
||||
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
|
||||
|
||||
|
@ -231,15 +227,18 @@ uint8_t matrix_master_scan(void) {
|
|||
// i2c_slave_buffer[i] = matrix[offset+i];
|
||||
// }
|
||||
#else // USE_SERIAL
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
serial_master_buffer[i] = matrix[offset+i];
|
||||
}
|
||||
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||
mchanged = memcmp((void *)serial_master_buffer,
|
||||
&matrix[offset], SERIAL_MASTER_BUFFER_LENGTH);
|
||||
#endif
|
||||
memcpy((void *)serial_master_buffer,
|
||||
&matrix[offset], SERIAL_MASTER_BUFFER_LENGTH);
|
||||
#endif
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
if( i2c_transaction() ) {
|
||||
#else // USE_SERIAL
|
||||
if( serial_transaction() ) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
|
@ -273,9 +272,19 @@ void matrix_slave_scan(void) {
|
|||
i2c_slave_buffer[i] = matrix[offset+i];
|
||||
}
|
||||
#else // USE_SERIAL
|
||||
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||
int change = 0;
|
||||
#endif
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||
if( serial_slave_buffer[i] != matrix[offset+i] )
|
||||
change = 1;
|
||||
#endif
|
||||
serial_slave_buffer[i] = matrix[offset+i];
|
||||
}
|
||||
#ifdef SERIAL_USE_MULTI_TRANSACTION
|
||||
slave_buffer_change_count += change;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue