diff --git a/right/src/usb_interfaces/usb_interface_basic_keyboard.c b/right/src/usb_interfaces/usb_interface_basic_keyboard.c index 3802b71..4ea58ff 100644 --- a/right/src/usb_interfaces/usb_interface_basic_keyboard.c +++ b/right/src/usb_interfaces/usb_interface_basic_keyboard.c @@ -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: