mirror of
https://github.com/mfulz/qmk_firmware.git
synced 2025-07-01 11:05:16 +02:00
Fixed interrupt driven HID device demos not clearing the interrupt flags in all circumstances.
This commit is contained in:
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,21 +429,12 @@ 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 */
|
|
||||||
Endpoint_ClearCurrentBank();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Finalize the stream transfer to send the last packet */
|
||||||
|
Endpoint_ClearCurrentBank();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if Keyboard LED status Endpoint has interrupted */
|
/* Check if Keyboard LED status Endpoint has interrupted */
|
||||||
|
@ -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 */
|
|
||||||
Endpoint_ClearCurrentBank();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Finalize the stream transfer to send the last packet */
|
||||||
|
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…
x
Reference in New Issue
Block a user