From 8b46810643ce2a8358848dd314f2501e64370091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Sun, 26 Feb 2017 11:10:04 +0100 Subject: [PATCH] Update USB reports from the main loop instead of the callback of the USB keyboard interface. --- right/src/main.c | 11 +++++++++-- right/src/usb_interfaces/usb_interface_keyboard.c | 9 ++++++--- right/src/usb_interfaces/usb_interface_keyboard.h | 2 ++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/right/src/main.c b/right/src/main.c index ce506af..3211955 100644 --- a/right/src/main.c +++ b/right/src/main.c @@ -7,6 +7,7 @@ #include "action.h" #include "bridge_protocol_scheduler.h" #include "peripherials/test_led.h" +#include "usb_interfaces/usb_interface_keyboard.h" key_matrix_t KeyMatrix = { .colNum = KEYBOARD_MATRIX_COLS_NUM, @@ -62,11 +63,17 @@ static const uint8_t testData[] = void UpdateUsbReports() { + if (!IsUsbKeyboardReportSent) { + return; + } + ResetActiveUsbKeyboardReport(); KeyMatrix_Scan(&KeyMatrix); memcpy(CurrentKeyStates[SLOT_ID_RIGHT_KEYBOARD_HALF], KeyMatrix.keyStates, MAX_KEY_COUNT_PER_MODULE); UpdateActiveUsbReports(); SwitchActiveUsbKeyboardReport(); + + IsUsbKeyboardReportSent = false; } void main() { @@ -75,13 +82,13 @@ void main() { LedDriver_InitAllLeds(1); InitBridgeProtocolScheduler(); KeyMatrix_Init(&KeyMatrix); - //UpdateUsbReports(); + UpdateUsbReports(); InitUsb(); // deserialize_Layer(testData, 0); while (1) { - //UpdateUsbReports(); + UpdateUsbReports(); asm("wfi"); } } diff --git a/right/src/usb_interfaces/usb_interface_keyboard.c b/right/src/usb_interfaces/usb_interface_keyboard.c index 529d6fb..46fc265 100644 --- a/right/src/usb_interfaces/usb_interface_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_keyboard.c @@ -42,6 +42,7 @@ usb_device_class_struct_t UsbKeyboardClass = { static usb_keyboard_report_t usbKeyboardReports[2]; usb_keyboard_report_t* ActiveUsbKeyboardReport = usbKeyboardReports; +bool IsUsbKeyboardReportSent = false; usb_keyboard_report_t* getInactiveUsbKeyboardReport() { @@ -60,9 +61,11 @@ void ResetActiveUsbKeyboardReport() static usb_status_t UsbKeyboardAction(void) { - UpdateUsbReports(); - return USB_DeviceHidSend(UsbCompositeDevice.keyboardHandle, USB_KEYBOARD_ENDPOINT_INDEX, - (uint8_t*)getInactiveUsbKeyboardReport(), USB_KEYBOARD_REPORT_LENGTH); + usb_status_t status = USB_DeviceHidSend( + UsbCompositeDevice.keyboardHandle, USB_KEYBOARD_ENDPOINT_INDEX, + (uint8_t*)getInactiveUsbKeyboardReport(), USB_KEYBOARD_REPORT_LENGTH); + IsUsbKeyboardReportSent = true; + return status; } usb_status_t UsbKeyboardCallback(class_handle_t handle, uint32_t event, void *param) diff --git a/right/src/usb_interfaces/usb_interface_keyboard.h b/right/src/usb_interfaces/usb_interface_keyboard.h index 828c83c..ba252af 100644 --- a/right/src/usb_interfaces/usb_interface_keyboard.h +++ b/right/src/usb_interfaces/usb_interface_keyboard.h @@ -3,6 +3,7 @@ // Includes: + #include "fsl_common.h" #include "usb_api.h" #include "usb_descriptors/usb_descriptor_keyboard_report.h" @@ -28,6 +29,7 @@ // Variables: + extern bool IsUsbKeyboardReportSent; extern usb_device_class_struct_t UsbKeyboardClass; extern usb_keyboard_report_t* ActiveUsbKeyboardReport;