1
0
Fork 0

Keyboard: Update the serial.c of crkbd based on the helix-serial.c (#4349)

This commit is contained in:
Kosuke Adachi 2018-11-05 03:46:26 +09:00 committed by Drashna Jaelre
parent e9fd42df71
commit 756d92c1a0
6 changed files with 277 additions and 105 deletions

View file

@ -7,8 +7,8 @@
#include <stddef.h>
#include <split_scomm.h>
#include "serial.h"
#ifdef SERIAL_DEBUG_MODE
#include <avr/io.h>
#ifdef CONSOLE_ENABLE
#include <print.h>
#endif
uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
@ -17,6 +17,7 @@ uint8_t volatile status_com = 0;
uint8_t volatile status1 = 0;
uint8_t slave_buffer_change_count = 0;
uint8_t s_change_old = 0xff;
uint8_t s_change_new = 0xff;
SSTD_t transactions[] = {
#define GET_SLAVE_STATUS 0
@ -41,12 +42,12 @@ SSTD_t transactions[] = {
void serial_master_init(void)
{
soft_serial_initiator_init(transactions);
soft_serial_initiator_init(transactions, TID_LIMIT(transactions));
}
void serial_slave_init(void)
{
soft_serial_target_init(transactions);
soft_serial_target_init(transactions, TID_LIMIT(transactions));
}
// 0 => no error
@ -54,19 +55,37 @@ void serial_slave_init(void)
// 2 => checksum error
int serial_update_buffers(int master_update)
{
int status;
int status, smatstatus;
static int need_retry = 0;
if( s_change_old != slave_buffer_change_count ) {
status = soft_serial_transaction(GET_SLAVE_BUFFER);
if( status == TRANSACTION_END )
s_change_old = slave_buffer_change_count;
if( s_change_old != s_change_new ) {
smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER);
if( smatstatus == TRANSACTION_END ) {
s_change_old = s_change_new;
#ifdef CONSOLE_ENABLE
uprintf("slave matrix = %b %b %b %b %b\n",
serial_slave_buffer[0], serial_slave_buffer[1],
serial_slave_buffer[2], serial_slave_buffer[3],
serial_slave_buffer[4] );
#endif
}
} else {
// serial_slave_buffer dosen't change
smatstatus = TRANSACTION_END; // dummy status
}
if( !master_update && !need_retry)
status = soft_serial_transaction(GET_SLAVE_STATUS);
else
status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
need_retry = ( status == TRANSACTION_END ) ? 0 : 1;
return status;
if( !master_update && !need_retry) {
status = soft_serial_transaction(GET_SLAVE_STATUS);
} else {
status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
}
if( status == TRANSACTION_END ) {
s_change_new = slave_buffer_change_count;
need_retry = 0;
} else {
need_retry = 1;
}
return smatstatus;
}
#endif // SERIAL_USE_MULTI_TRANSACTION