Skip to content

Commit

Permalink
Allow recording of the last matrix activity time, to simplify impleme…
Browse files Browse the repository at this point in the history
…ntation of display timeouts and the like.
  • Loading branch information
tzarc committed Jan 11, 2021
1 parent b3f0e6a commit d00a686
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 16 deletions.
34 changes: 24 additions & 10 deletions quantum/split_common/matrix.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,23 +245,37 @@ void matrix_init(void) {
split_post_init();
}

void matrix_post_scan(void) {
bool matrix_pre_scan(void) {
bool changed = false;
if (is_keyboard_master()) {
static uint8_t error_count;

if (!transport_master(matrix + thatHand)) {
matrix_row_t slave_matrix[ROWS_PER_HAND] = {0};
if (!transport_master(slave_matrix)) {
error_count++;

if (error_count > ERROR_DISCONNECT_COUNT) {
// reset other half if disconnected
for (int i = 0; i < ROWS_PER_HAND; ++i) {
matrix[thatHand + i] = 0;
}
}
} else {
error_count = 0;
}

if (error_count > ERROR_DISCONNECT_COUNT) {
// reset other half if disconnected
for (int i = 0; i < ROWS_PER_HAND; ++i) {
slave_matrix[i] = 0;
}
}

for (int i = 0; i < ROWS_PER_HAND; ++i) {
if (matrix[thatHand + i] != slave_matrix[i]) {
matrix[thatHand + i] = slave_matrix[i];
changed = true;
}
}
}
return changed;
}

void matrix_post_scan(void) {
if (is_keyboard_master()) {
matrix_scan_quantum();
} else {
transport_slave(matrix + thisHand);
Expand All @@ -271,7 +285,7 @@ void matrix_post_scan(void) {
}

uint8_t matrix_scan(void) {
bool changed = false;
bool changed = matrix_pre_scan();

#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
// Set row, read cols
Expand Down
13 changes: 7 additions & 6 deletions tmk_core/common/keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "dip_switch.h"
#endif

static uint32_t last_matrix_modification_time = 0;
uint32_t last_matrix_activity_time(void) { return last_matrix_modification_time; }
uint32_t last_matrix_activity_elapsed(void) { return timer_elapsed32(last_matrix_modification_time); }

// Only enable this if console is enabled to print to
#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE)
static uint32_t matrix_timer = 0;
Expand Down Expand Up @@ -338,11 +342,8 @@ void keyboard_task(void) {
housekeeping_task_kb();
housekeeping_task_user();

#if defined(OLED_DRIVER_ENABLE) && !defined(OLED_DISABLE_TIMEOUT)
uint8_t ret = matrix_scan();
#else
matrix_scan();
#endif
uint8_t matrix_changed = matrix_scan();
if (matrix_changed) last_matrix_modification_time = timer_read32();

if (should_process_keypress()) {
for (uint8_t r = 0; r < MATRIX_ROWS; r++) {
Expand Down Expand Up @@ -409,7 +410,7 @@ void keyboard_task(void) {
oled_task();
# ifndef OLED_DISABLE_TIMEOUT
// Wake up oled if user is using those fabulous keys!
if (ret) oled_on();
if (matrix_changed) oled_on();
# endif
#endif

Expand Down
3 changes: 3 additions & 0 deletions tmk_core/common/keyboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ void keyboard_post_init_user(void);
void housekeeping_task_kb(void);
void housekeeping_task_user(void);

uint32_t last_matrix_activity_time(void); // Timestamp of the last matrix activity
uint32_t last_matrix_activity_elapsed(void); // Number of milliseconds since the last matrix activity

#ifdef __cplusplus
}
#endif

0 comments on commit d00a686

Please sign in to comment.