X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/6bda628718f67c04ed43e8328f55bdce5319c504..bea72a8412f99b294c00341fa16a8308bcc66f15:/Demos/Device/LowLevel/Mouse/Mouse.c diff --git a/Demos/Device/LowLevel/Mouse/Mouse.c b/Demos/Device/LowLevel/Mouse/Mouse.c index 97aa55ff4..6aa258a00 100644 --- a/Demos/Device/LowLevel/Mouse/Mouse.c +++ b/Demos/Device/LowLevel/Mouse/Mouse.c @@ -113,18 +113,17 @@ void EVENT_USB_Device_Disconnect(void) */ void EVENT_USB_Device_ConfigurationChanged(void) { - /* Indicate USB connected and ready */ - LEDs_SetAllLEDs(LEDMASK_USB_READY); - - /* Setup Mouse Report Endpoint */ - if (!(Endpoint_ConfigureEndpoint(MOUSE_EPNUM, EP_TYPE_INTERRUPT, - ENDPOINT_DIR_IN, MOUSE_EPSIZE, - ENDPOINT_BANK_SINGLE))) - { - LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - } + bool ConfigSuccess = true; + + /* Setup HID Report Endpoint */ + ConfigSuccess &= Endpoint_ConfigureEndpoint(MOUSE_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN, + MOUSE_EPSIZE, ENDPOINT_BANK_SINGLE); + /* Turn on Start-of-Frame events for tracking HID report period exiry */ USB_Device_EnableSOFEvents(); + + /* Indicate endpoint configuration success or failure */ + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Event handler for the USB_UnhandledControlRequest event. This is used to catch standard and class specific @@ -141,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; @@ -165,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(); } @@ -176,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; @@ -188,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; @@ -203,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(); }