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/Mouse/Mouse.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/Mouse/Mouse.c')
-rw-r--r-- | Demos/Device/LowLevel/Mouse/Mouse.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c index 1cc6d88499..6aa258a008 100644 --- a/Demos/Device/LowLevel/Mouse/Mouse.c +++ b/Demos/Device/LowLevel/Mouse/Mouse.c @@ -140,19 +140,17 @@ void EVENT_USB_Device_UnhandledControlRequest(void) { USB_MouseReport_Data_t MouseReportData; - Endpoint_ClearSETUP(); - /* Create the next mouse report for transmission to the host */ CreateMouseReport(&MouseReportData); - + + Endpoint_ClearSETUP(); + /* Write the report data to the control endpoint */ Endpoint_Write_Control_Stream_LE(&MouseReportData, sizeof(MouseReportData)); - + Endpoint_ClearOUT(); + /* Clear the report data afterwards */ memset(&MouseReportData, 0, sizeof(MouseReportData)); - - /* Finalize the stream transfer to send the last packet or clear the host abort */ - Endpoint_ClearOUT(); } break; @@ -164,9 +162,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Write the current protocol flag to the host */ Endpoint_Write_Byte(UsingReportProtocol); - /* Send the flag to the host */ Endpoint_ClearIN(); - Endpoint_ClearStatusStage(); } @@ -175,11 +171,10 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + Endpoint_ClearStatusStage(); + /* Set or clear the flag depending on what the host indicates that the current Protocol should be */ UsingReportProtocol = (USB_ControlRequest.wValue != 0); - - Endpoint_ClearStatusStage(); } break; @@ -187,11 +182,10 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); - + Endpoint_ClearStatusStage(); + /* Get idle period in MSB, must multiply by 4 to get the duration in milliseconds */ IdleCount = ((USB_ControlRequest.wValue & 0xFF00) >> 6); - - Endpoint_ClearStatusStage(); } break; @@ -202,10 +196,8 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Write the current idle duration to the host, must be divided by 4 before sent to host */ Endpoint_Write_Byte(IdleCount >> 2); - - /* Send the flag to the host */ - Endpoint_ClearIN(); + Endpoint_ClearIN(); Endpoint_ClearStatusStage(); } |