Commit ee7bd568 authored by Dean Camera's avatar Dean Camera
Browse files

Ensure that the Keyboard and Mouse demos adhere to the boot protocol...

Ensure that the Keyboard and Mouse demos adhere to the boot protocol specification in that they send a report before the idle period has elapsed if the report data has changed.
parent 7184153e
......@@ -385,8 +385,9 @@ void ProcessLEDReport(uint8_t LEDReport)
/** Sends the next HID report to the host, via the keyboard data endpoint. */
static inline void SendNextReport(void)
{
USB_KeyboardReport_Data_t KeyboardReportData;
bool SendReport = true;
static USB_KeyboardReport_Data_t PrevKeyboardReportData;
USB_KeyboardReport_Data_t KeyboardReportData;
bool SendReport = true;
/* Create the next keyboard report for transmission to the host */
CreateKeyboardReport(&KeyboardReportData);
......@@ -402,11 +403,14 @@ static inline void SendNextReport(void)
}
else
{
/* Idle period not elapsed, indicate that a report must not be sent */
SendReport = false;
/* Idle period not elapsed, indicate that a report must not be sent unless the report has changed */
SendReport = (memcmp(&PrevKeyboardReportData, &KeyboardReportData, sizeof(USB_KeyboardReport_Data_t)) != 0);
}
}
/* Save the current report data for later comparison to check for changes */
PrevKeyboardReportData = KeyboardReportData;
/* Select the Keyboard Report Endpoint */
Endpoint_SelectEndpoint(KEYBOARD_EPNUM);
......
......@@ -337,8 +337,9 @@ void CreateMouseReport(USB_MouseReport_Data_t* ReportData)
/** Sends the next HID report to the host, via the keyboard data endpoint. */
static inline void SendNextReport(void)
{
USB_MouseReport_Data_t MouseReportData;
bool SendReport = true;
static USB_MouseReport_Data_t PrevMouseReportData;
USB_MouseReport_Data_t MouseReportData;
bool SendReport = true;
/* Create the next mouse report for transmission to the host */
CreateMouseReport(&MouseReportData);
......@@ -354,10 +355,13 @@ static inline void SendNextReport(void)
}
else
{
/* Idle period not elapsed, indicate that a report must not be sent */
SendReport = false;
/* Idle period not elapsed, indicate that a report must not be sent unless the report has changed */
SendReport = (memcmp(&PrevMouseReportData, &MouseReportData, sizeof(USB_MouseReport_Data_t)) != 0);
}
}
/* Save the current report data for later comparison to check for changes */
PrevMouseReportData = MouseReportData;
/* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_EPNUM);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment