Update USB reports from the main loop instead of the callback of the USB keyboard interface.
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user