Ensure that the previous HID reports in the HID device class driver are kept per-instance, rather than per-device.
This commit is contained in:
		
							parent
							
								
									72932e2780
								
							
						
					
					
						commit
						7227e133a9
					
				
					 2 changed files with 5 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -150,8 +150,6 @@ bool HID_Device_ConfigureEndpoints(USB_ClassInfo_HID_Device_t* const HIDInterfac
 | 
			
		|||
		
 | 
			
		||||
void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	static uint8_t PreviousReportINData[HID_MAX_REPORT_SIZE];
 | 
			
		||||
 | 
			
		||||
	if (USB_DeviceState != DEVICE_STATE_Configured)
 | 
			
		||||
	  return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -167,10 +165,10 @@ void HID_Device_USBTask(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo)
 | 
			
		|||
 | 
			
		||||
		ReportINSize  = CALLBACK_HID_Device_CreateHIDReport(HIDInterfaceInfo, &ReportID, ReportINData);
 | 
			
		||||
 | 
			
		||||
		bool StatesChanged     = (memcmp(ReportINData, PreviousReportINData, ReportINSize) != 0);
 | 
			
		||||
		bool StatesChanged     = (memcmp(ReportINData, HIDInterfaceInfo->State.PreviousReportINData, ReportINSize) != 0);
 | 
			
		||||
		bool IdlePeriodElapsed = (HIDInterfaceInfo->State.IdleCount && !(HIDInterfaceInfo->State.IdleMSRemaining));
 | 
			
		||||
		
 | 
			
		||||
		memcpy(PreviousReportINData, ReportINData, ReportINSize);
 | 
			
		||||
		memcpy(HIDInterfaceInfo->State.PreviousReportINData, ReportINData, ReportINSize);
 | 
			
		||||
 | 
			
		||||
		if (ReportINSize && (StatesChanged || IdlePeriodElapsed))
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,7 +88,9 @@
 | 
			
		|||
					bool     UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */
 | 
			
		||||
					uint16_t IdleCount; /**< Report idle period, in mS, set by the host */
 | 
			
		||||
					uint16_t IdleMSRemaining; /**< Total number of mS remaining before the idle period elapsed - this should be
 | 
			
		||||
											   *   decremented by the user application if non-zero each millisecond */			
 | 
			
		||||
											   *   decremented by the user application if non-zero each millisecond */	
 | 
			
		||||
 | 
			
		||||
					uint8_t PreviousReportINData[HID_MAX_REPORT_SIZE]; /**< Previously generated report from the HID interface */
 | 
			
		||||
				} State; /**< State data for the USB class interface within the device. All elements in this section
 | 
			
		||||
				          *   are reset to their defaults when the interface is enumerated.
 | 
			
		||||
				          */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue