From f449ecc07401a1c794394ea4c867597ff5daaf40 Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Tue, 21 Nov 2023 16:09:54 +0800 Subject: [PATCH] fl16: Keep keyboard out of suspend at least 30s With selective suspend windows likes to suspend the keyboard very eagerly after 5 seconds without activity. So we send keyboard reports every second for 25 seconds to keep it awake. Signed-off-by: Daniel Schaefer --- keyboards/framework/matrix.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/keyboards/framework/matrix.c b/keyboards/framework/matrix.c index 36a3032700..8c71ae68c8 100644 --- a/keyboards/framework/matrix.c +++ b/keyboards/framework/matrix.c @@ -313,6 +313,9 @@ bool handle_idle(void) { return false; } +static uint16_t keepalive_timer = 0; +static uint16_t keepalive_count = 0; + /** * Overriding behavior of matrix_scan from quantum/matrix.c */ @@ -381,7 +384,23 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) { } } - return changed; + if (changed) { + keepalive_timer = timer_read(); + keepalive_count = 25; + } else { + // Measure how many seconds have passed + if (keepalive_count > 0 && TIMER_DIFF_16(timer_read(), keepalive_timer) >= 1000) { + keepalive_timer = timer_read(); + keepalive_count -= 1; + + // Print to the console to cause bus activity, + // preventing the driver from suspending the device + uprintf("Keepalive: %d\n", keepalive_count); + send_keyboard_report(); + } + } + + return changed; } //bool process_record_user(uint16_t keycode, keyrecord_t *record) {