From 15d09552a4d475032869594cf3a0f6eb2674a822 Mon Sep 17 00:00:00 2001 From: Kristian Sloth Lauszus Date: Sun, 11 Mar 2018 02:12:21 +0100 Subject: [PATCH] There is no reason to change the active report if it has not changed --- right/src/usb_report_updater.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index f4b0277..ab70eda 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -425,15 +425,33 @@ void UpdateUsbReports(void) updateActiveUsbReports(); - SwitchActiveUsbBasicKeyboardReport(); - SwitchActiveUsbMediaKeyboardReport(); - SwitchActiveUsbSystemKeyboardReport(); - SwitchActiveUsbMouseReport(); + static usb_basic_keyboard_report_t last_basic_report = { .scancodes[0] = 0xFF }; + if (memcmp(ActiveUsbBasicKeyboardReport, &last_basic_report, sizeof(usb_basic_keyboard_report_t)) != 0) { + last_basic_report = *ActiveUsbBasicKeyboardReport; + SwitchActiveUsbBasicKeyboardReport(); + IsUsbBasicKeyboardReportSent = false; + } - IsUsbBasicKeyboardReportSent = false; - IsUsbMediaKeyboardReportSent = false; - IsUsbSystemKeyboardReportSent = false; - IsUsbMouseReportSent = false; + static usb_media_keyboard_report_t last_media_report = { .scancodes[0] = 0xFF }; + if (memcmp(ActiveUsbMediaKeyboardReport, &last_media_report, sizeof(usb_media_keyboard_report_t)) != 0) { + last_media_report = *ActiveUsbMediaKeyboardReport; + SwitchActiveUsbMediaKeyboardReport(); + IsUsbMediaKeyboardReportSent = false; + } + + static usb_system_keyboard_report_t last_system_report = { .scancodes[0] = 0xFF }; + if (memcmp(ActiveUsbSystemKeyboardReport, &last_system_report, sizeof(usb_system_keyboard_report_t)) != 0) { + last_system_report = *ActiveUsbSystemKeyboardReport; + SwitchActiveUsbSystemKeyboardReport(); + IsUsbSystemKeyboardReportSent = false; + } + + static usb_mouse_report_t last_mouse_report = { .buttons = 0xFF }; + if (memcmp(ActiveUsbMouseReport, &last_mouse_report, sizeof(usb_mouse_report_t)) != 0) { + last_mouse_report = *ActiveUsbMouseReport; + SwitchActiveUsbMouseReport(); + IsUsbMouseReportSent = false; + } Timer_SetCurrentTime(&lastUsbUpdateTime); }