From ee7bd5685e000b3a128069fd75d436c653ab54b2 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Thu, 19 Mar 2009 15:10:51 +0000 Subject: 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. --- Demos/Mouse/Mouse.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'Demos/Mouse') diff --git a/Demos/Mouse/Mouse.c b/Demos/Mouse/Mouse.c index c4b7f55ad..c066d424a 100644 --- a/Demos/Mouse/Mouse.c +++ b/Demos/Mouse/Mouse.c @@ -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); -- cgit v1.2.3