X-Git-Url: http://git.linex4red.de/pub/lufa.git/blobdiff_plain/8f6b4ddf764c3a54e42d00a7502c82c5c3e71b1c..f11f69fd2989899b3088ea7d11b981f2d68c05e0:/Demos/Device/KeyboardMouse/KeyboardMouse.c?ds=sidebyside diff --git a/Demos/Device/KeyboardMouse/KeyboardMouse.c b/Demos/Device/KeyboardMouse/KeyboardMouse.c index 71e23ab1e..dc039eec0 100644 --- a/Demos/Device/KeyboardMouse/KeyboardMouse.c +++ b/Demos/Device/KeyboardMouse/KeyboardMouse.c @@ -40,9 +40,9 @@ /* Scheduler Task List */ TASK_LIST { - { Task: USB_USBTask , TaskStatus: TASK_STOP }, - { Task: USB_Mouse , TaskStatus: TASK_RUN }, - { Task: USB_Keyboard , TaskStatus: TASK_RUN }, + { .Task = USB_USBTask , .TaskStatus = TASK_STOP }, + { .Task = USB_Mouse , .TaskStatus = TASK_RUN }, + { .Task = USB_Keyboard , .TaskStatus = TASK_RUN }, }; /* Global Variables */ @@ -139,17 +139,15 @@ EVENT_HANDLER(USB_UnhandledControlPacket) uint8_t ReportSize; /* Handle HID Class specific requests */ - switch (bRequest) + switch (USB_ControlRequest.bRequest) { case REQ_GetReport: - if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { - Endpoint_Discard_Word(); - - uint16_t wIndex = Endpoint_Read_Word_LE(); - + Endpoint_ClearSETUP(); + /* Determine if it is the mouse or the keyboard data that is being requested */ - if (!(wIndex)) + if (!(USB_ControlRequest.wIndex)) { ReportData = (uint8_t*)&KeyboardReportData; ReportSize = sizeof(KeyboardReportData); @@ -160,30 +158,21 @@ EVENT_HANDLER(USB_UnhandledControlPacket) ReportSize = sizeof(MouseReportData); } - /* Read in the number of bytes in the report to send to the host */ - uint16_t wLength = Endpoint_Read_Word_LE(); - - /* If trying to send more bytes than exist to the host, clamp the value at the report size */ - if (wLength > ReportSize) - wLength = ReportSize; - - Endpoint_ClearControlSETUP(); - /* Write the report data to the control endpoint */ - Endpoint_Write_Control_Stream_LE(ReportData, wLength); + Endpoint_Write_Control_Stream_LE(ReportData, ReportSize); /* Clear the report data afterwards */ memset(ReportData, 0, ReportSize); /* Finalize the stream transfer to send the last packet or clear the host abort */ - Endpoint_ClearControlOUT(); + Endpoint_ClearOUT(); } break; case REQ_SetReport: - if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { - Endpoint_ClearControlSETUP(); + Endpoint_ClearSETUP(); /* Wait until the LED report has been sent by the host */ while (!(Endpoint_IsOUTReceived())); @@ -205,11 +194,11 @@ EVENT_HANDLER(USB_UnhandledControlPacket) LEDs_SetAllLEDs(LEDMask); /* Clear the endpoint data */ - Endpoint_ClearControlOUT(); + Endpoint_ClearOUT(); /* Acknowledge status stage */ while (!(Endpoint_IsINReady())); - Endpoint_ClearControlIN(); + Endpoint_ClearIN(); } break;