diff options
author | Dean Camera <[email protected]> | 2010-08-22 03:26:20 +0000 |
---|---|---|
committer | Dean Camera <[email protected]> | 2010-08-22 03:26:20 +0000 |
commit | 4cc7f5200beef90c39c8c8310ed7c8b849afb4d9 (patch) | |
tree | a8e2e56961f7e39b888e4ded0c38c5ab9cf6f5b6 /Demos/Device/LowLevel/GenericHID/GenericHID.c | |
parent | 1be3436e895c9937dcd4ebbec33ea199f3e26db2 (diff) | |
download | qmk_firmware-4cc7f5200beef90c39c8c8310ed7c8b849afb4d9.tar.gz qmk_firmware-4cc7f5200beef90c39c8c8310ed7c8b849afb4d9.zip |
Changed all Device mode LowLevel demos and Device Class drivers so that the control request is acknowledged and any data transferred as quickly as possible without any processing inbetween sections, so that long callbacks or event handlers will not break communications with the host by exceeding the maximum control request stage timeout period.
Diffstat (limited to 'Demos/Device/LowLevel/GenericHID/GenericHID.c')
-rw-r--r-- | Demos/Device/LowLevel/GenericHID/GenericHID.c | 27 |
1 files changed, 3 insertions, 24 deletions
diff --git a/Demos/Device/LowLevel/GenericHID/GenericHID.c b/Demos/Device/LowLevel/GenericHID/GenericHID.c index 5146efdda3..a72cecb45b 100644 --- a/Demos/Device/LowLevel/GenericHID/GenericHID.c +++ b/Demos/Device/LowLevel/GenericHID/GenericHID.c @@ -120,15 +120,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { uint8_t GenericData[GENERIC_REPORT_SIZE]; + CreateGenericHIDReport(GenericData); Endpoint_ClearSETUP(); - - CreateGenericHIDReport(GenericData); /* Write the report data to the control endpoint */ Endpoint_Write_Control_Stream_LE(&GenericData, sizeof(GenericData)); - - /* Finalize the stream transfer to send the last packet or clear the host abort */ Endpoint_ClearOUT(); } @@ -139,30 +136,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void) uint8_t GenericData[GENERIC_REPORT_SIZE]; Endpoint_ClearSETUP(); - - /* Wait until the generic report has been sent by the host */ - while (!(Endpoint_IsOUTReceived())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - return; - } + /* Read the report data from the control endpoint */ Endpoint_Read_Control_Stream_LE(&GenericData, sizeof(GenericData)); - - ProcessGenericHIDReport(GenericData); - - /* Clear the endpoint data */ Endpoint_ClearOUT(); - /* Wait until the host is ready to receive the request confirmation */ - while (!(Endpoint_IsINReady())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - return; - } - - /* Handshake the request by sending an empty IN packet */ - Endpoint_ClearIN(); + ProcessGenericHIDReport(GenericData); } break; |