Fixed interrupt driven HID device demos not clearing the interrupt flags in all circumstances.

pull/1469/head
Dean Camera 16 years ago
parent d711e37d2f
commit b0d9f961ac

@ -404,6 +404,15 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
USB_KeyboardReport_Data_t KeyboardReportData; USB_KeyboardReport_Data_t KeyboardReportData;
bool SendReport; bool SendReport;
/* Select the Keyboard Report Endpoint */
Endpoint_SelectEndpoint(KEYBOARD_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Keyboard Report endpoint interrupt */
Endpoint_ClearEndpointInterrupt(KEYBOARD_EPNUM);
/* Create the next keyboard report for transmission to the host */ /* Create the next keyboard report for transmission to the host */
SendReport = GetNextReport(&KeyboardReportData); SendReport = GetNextReport(&KeyboardReportData);
@ -420,22 +429,13 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
/* Check to see if a report should be issued */ /* Check to see if a report should be issued */
if (SendReport) if (SendReport)
{ {
/* Select the Keyboard Report Endpoint */
Endpoint_SelectEndpoint(KEYBOARD_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Keyboard Report endpoint interrupt */
Endpoint_ClearEndpointInterrupt(KEYBOARD_EPNUM);
/* Write Keyboard Report Data */ /* Write Keyboard Report Data */
Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData)); Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));
}
/* Finalize the stream transfer to send the last packet */ /* Finalize the stream transfer to send the last packet */
Endpoint_ClearCurrentBank(); Endpoint_ClearCurrentBank();
} }
}
/* Check if Keyboard LED status Endpoint has interrupted */ /* Check if Keyboard LED status Endpoint has interrupted */
if (Endpoint_HasEndpointInterrupted(KEYBOARD_LEDS_EPNUM)) if (Endpoint_HasEndpointInterrupted(KEYBOARD_LEDS_EPNUM))

@ -392,6 +392,15 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
USB_KeyboardReport_Data_t KeyboardReportData; USB_KeyboardReport_Data_t KeyboardReportData;
bool SendReport; bool SendReport;
/* Select the Keyboard Report Endpoint */
Endpoint_SelectEndpoint(KEYBOARD_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Keyboard Report endpoint interrupt */
Endpoint_ClearEndpointInterrupt(KEYBOARD_EPNUM);
/* Create the next keyboard report for transmission to the host */ /* Create the next keyboard report for transmission to the host */
SendReport = GetNextReport(&KeyboardReportData); SendReport = GetNextReport(&KeyboardReportData);
@ -408,15 +417,6 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
/* Check to see if a report should be issued */ /* Check to see if a report should be issued */
if (SendReport) if (SendReport)
{ {
/* Select the Keyboard Report Endpoint */
Endpoint_SelectEndpoint(KEYBOARD_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Keyboard Report endpoint interrupt */
Endpoint_ClearEndpointInterrupt(KEYBOARD_EPNUM);
/* Write Keyboard Report Data */ /* Write Keyboard Report Data */
Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData)); Endpoint_Write_Stream_LE(&KeyboardReportData, sizeof(KeyboardReportData));
} }

@ -358,6 +358,15 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
USB_MouseReport_Data_t MouseReportData; USB_MouseReport_Data_t MouseReportData;
bool SendReport = true; bool SendReport = true;
/* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Mouse Report endpoint interrupt and select the endpoint */
Endpoint_ClearEndpointInterrupt(MOUSE_EPNUM);
/* Create the next mouse report for transmission to the host */ /* Create the next mouse report for transmission to the host */
GetNextReport(&MouseReportData); GetNextReport(&MouseReportData);
@ -380,20 +389,11 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
/* Check to see if a report should be issued */ /* Check to see if a report should be issued */
if (SendReport) if (SendReport)
{ {
/* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Mouse Report endpoint interrupt and select the endpoint */
Endpoint_ClearEndpointInterrupt(MOUSE_EPNUM);
/* Write Mouse Report Data */ /* Write Mouse Report Data */
Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData)); Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData));
}
/* Finalize the stream transfer to send the last packet */ /* Finalize the stream transfer to send the last packet */
Endpoint_ClearCurrentBank(); Endpoint_ClearCurrentBank();
} }
} }
}

@ -345,6 +345,15 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
USB_MouseReport_Data_t MouseReportData; USB_MouseReport_Data_t MouseReportData;
bool SendReport = true; bool SendReport = true;
/* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Mouse Report endpoint interrupt and select the endpoint */
Endpoint_ClearEndpointInterrupt(MOUSE_EPNUM);
/* Create the next mouse report for transmission to the host */ /* Create the next mouse report for transmission to the host */
GetNextReport(&MouseReportData); GetNextReport(&MouseReportData);
@ -367,15 +376,6 @@ ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
/* Check to see if a report should be issued */ /* Check to see if a report should be issued */
if (SendReport) if (SendReport)
{ {
/* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_EPNUM);
/* Clear the endpoint IN interrupt flag */
USB_INT_Clear(ENDPOINT_INT_IN);
/* Clear the Mouse Report endpoint interrupt and select the endpoint */
Endpoint_ClearEndpointInterrupt(MOUSE_EPNUM);
/* Write Mouse Report Data */ /* Write Mouse Report Data */
Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData)); Endpoint_Write_Stream_LE(&MouseReportData, sizeof(MouseReportData));
} }

Loading…
Cancel
Save