Add sync_timer support over serial_link (i.e. Ergodox Infinity) (#12845)

This commit is contained in:
Joakim Tufvegren 2021-06-20 04:18:00 +02:00 committed by GitHub
parent fc749b40e6
commit 8d9f527081
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 2 deletions

View file

@ -29,10 +29,13 @@ SOFTWARE.
#include "serial_link/protocol/transport.h" #include "serial_link/protocol/transport.h"
#include "serial_link/protocol/frame_router.h" #include "serial_link/protocol/frame_router.h"
#include "matrix.h" #include "matrix.h"
#include "sync_timer.h"
#include <stdbool.h> #include <stdbool.h>
#include "print.h" #include "print.h"
#include "config.h" #include "config.h"
#define SYNC_TIMER_OFFSET 2
static event_source_t new_data_event; static event_source_t new_data_event;
static bool serial_link_connected; static bool serial_link_connected;
static bool is_master = false; static bool is_master = false;
@ -159,10 +162,16 @@ static matrix_object_t last_matrix = {};
SLAVE_TO_MASTER_OBJECT(keyboard_matrix, matrix_object_t); SLAVE_TO_MASTER_OBJECT(keyboard_matrix, matrix_object_t);
MASTER_TO_ALL_SLAVES_OBJECT(serial_link_connected, bool); MASTER_TO_ALL_SLAVES_OBJECT(serial_link_connected, bool);
#ifndef DISABLE_SYNC_TIMER
MASTER_TO_ALL_SLAVES_OBJECT(sync_timer, uint32_t);
#endif
static remote_object_t* remote_objects[] = { static remote_object_t* remote_objects[] = {
REMOTE_OBJECT(serial_link_connected), REMOTE_OBJECT(serial_link_connected),
REMOTE_OBJECT(keyboard_matrix), REMOTE_OBJECT(keyboard_matrix),
#ifndef DISABLE_SYNC_TIMER
REMOTE_OBJECT(sync_timer),
#endif
}; };
void init_serial_link(void) { void init_serial_link(void) {
@ -200,14 +209,27 @@ void serial_link_update(void) {
m->rows[i] = matrix.rows[i]; m->rows[i] = matrix.rows[i];
} }
end_write_keyboard_matrix(); end_write_keyboard_matrix();
*begin_write_serial_link_connected() = true; *begin_write_serial_link_connected() = true;
end_write_serial_link_connected(); end_write_serial_link_connected();
#ifndef DISABLE_SYNC_TIMER
*begin_write_sync_timer() = sync_timer_read32() + SYNC_TIMER_OFFSET;
end_write_sync_timer();
#endif
} }
matrix_object_t* m = read_keyboard_matrix(0); matrix_object_t* m = read_keyboard_matrix(0);
if (m) { if (m) {
matrix_set_remote(m->rows, 0); matrix_set_remote(m->rows, 0);
} }
#ifndef DISABLE_SYNC_TIMER
uint32_t* t = read_sync_timer();
if (t) {
sync_timer_update(*t);
}
#endif
} }
void signal_data_written(void) { chEvtBroadcast(&new_data_event); } void signal_data_written(void) { chEvtBroadcast(&new_data_event); }

View file

@ -26,7 +26,7 @@ SOFTWARE.
#include "sync_timer.h" #include "sync_timer.h"
#include "keyboard.h" #include "keyboard.h"
#if defined(SPLIT_KEYBOARD) && !defined(DISABLE_SYNC_TIMER) #if (defined(SPLIT_KEYBOARD) || defined(SERIAL_LINK_ENABLE)) && !defined(DISABLE_SYNC_TIMER)
volatile int32_t sync_timer_ms; volatile int32_t sync_timer_ms;
void sync_timer_init(void) { sync_timer_ms = 0; } void sync_timer_init(void) { sync_timer_ms = 0; }

View file

@ -32,7 +32,7 @@ SOFTWARE.
extern "C" { extern "C" {
#endif #endif
#if defined(SPLIT_KEYBOARD) && !defined(DISABLE_SYNC_TIMER) #if (defined(SPLIT_KEYBOARD) || defined(SERIAL_LINK_ENABLE)) && !defined(DISABLE_SYNC_TIMER)
void sync_timer_init(void); void sync_timer_init(void);
void sync_timer_update(uint32_t time); void sync_timer_update(uint32_t time);
uint16_t sync_timer_read(void); uint16_t sync_timer_read(void);