Detect Caps Lock state and set the LED accordingly (#91)

Fixes #65
This commit is contained in:
Kristian Sloth Lauszus
2018-02-11 12:45:46 +01:00
committed by László Monda
parent 6881f8e340
commit 1af28a79db

View File

@@ -1,9 +1,11 @@
#include "led_display.h"
#include "usb_composite_device.h"
static usb_basic_keyboard_report_t usbBasicKeyboardReports[2];
uint32_t UsbBasicKeyboardActionCounter;
usb_basic_keyboard_report_t* ActiveUsbBasicKeyboardReport = usbBasicKeyboardReports;
bool IsUsbBasicKeyboardReportSent = false;
static uint8_t usbBasicKeyboardInBuffer[USB_BASIC_KEYBOARD_REPORT_LENGTH];
usb_basic_keyboard_report_t* getInactiveUsbBasicKeyboardReport(void)
{
@@ -41,10 +43,32 @@ usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, voi
}
break;
case kUSB_DeviceHidEventGetReport:
case kUSB_DeviceHidEventSetReport:
case kUSB_DeviceHidEventRequestReportBuffer:
error = kStatus_USB_InvalidRequest;
break;
case kUSB_DeviceHidEventSetReport:
{
usb_device_hid_report_struct_t *report = (usb_device_hid_report_struct_t*)param;
if (report->reportType == USB_DEVICE_HID_REQUEST_GET_REPORT_TYPE_OUPUT && report->reportId == 0 && report->reportLength == 1) {
LedDisplay_SetIcon(LedDisplayIcon_CapsLock, report->reportBuffer[0] & HID_KEYBOARD_LED_CAPSLOCK);
error = kStatus_USB_Success;
} else {
error = kStatus_USB_InvalidRequest;
}
}
break;
case kUSB_DeviceHidEventRequestReportBuffer:
{
usb_device_hid_report_struct_t *report = (usb_device_hid_report_struct_t*)param;
if (report->reportLength <= USB_BASIC_KEYBOARD_REPORT_LENGTH) {
report->reportBuffer = usbBasicKeyboardInBuffer;
error = kStatus_USB_Success;
}
else {
error = kStatus_USB_InvalidRequest;
}
}
break;
case kUSB_DeviceHidEventGetIdle:
case kUSB_DeviceHidEventGetProtocol:
case kUSB_DeviceHidEventSetIdle: