mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	Fixed race conditions in the CDC, HID and Mass Storage class drivers when processing some control requests.
This commit is contained in:
		
							parent
							
								
									2b54cd984d
								
							
						
					
					
						commit
						8df0cf3241
					
				| @ -26,6 +26,7 @@ | ||||
|   *  - Core: | ||||
|   *   - Fixed ring buffer size limited to 255 elements, instead of the intended 65535 elements. | ||||
|   *   - Fixed CDC class drivers not saving and sending all 16-bits of the control line states (thanks to Matthew Swabey) | ||||
|   *   - Fixed race conditions in the CDC, HID and Mass Storage class drivers when processing some control requests | ||||
|   *  - Library Applications: | ||||
|   *   - Added reliability patches to the AVRISP-MKII Clone project's PDI/TPI protocols (thanks to Justin Mattair) | ||||
|   *   - Fixed AVRISP-MKII Clone compile warning on AVR8 U4 targets even when NO_VTARGET_DETECT is enabled | ||||
|  | ||||
| @ -136,6 +136,10 @@ | ||||
|  *  - Elektor Magazine, "20 x Open Source" by Jens Nickel, March 2010 Issue | ||||
|  *  - Circuit Cellar Magazine, "Advanced USB Design Debugging" by Collin O'Flynn, August 2010 Issue | ||||
|  * | ||||
|  *  \section Sec_PortsAndForks Non-Official LUFA Ports and Forks | ||||
|  *  - NXP's official "nxpusblib" LUFA fork, for LPC devices: http://www.lpcware.com/content/project/nxpusblib | ||||
|  *  - Kevin Mehall's LUFA port to the NXP LPC13xx: https://github.com/kevinmehall/LUFA-LPC13xx | ||||
|  * | ||||
|  *  \section Sec_LUFANotableMentions Other Notable Mentions of LUFA | ||||
|  *  - Adafruit "Ask an Engineer", 7th November 2010 | ||||
|  *  - Arduino 2010 Keynote speech | ||||
|  | ||||
| @ -51,10 +51,14 @@ void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInter | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 
 | ||||
| 				Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); | ||||
| 				Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); | ||||
| 				Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); | ||||
| 				Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); | ||||
| 
 | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			} | ||||
| @ -64,10 +68,14 @@ void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInter | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 
 | ||||
| 				while (!(Endpoint_IsOUTReceived())); | ||||
| 
 | ||||
| 				CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); | ||||
| 				CDCInterfaceInfo->State.LineEncoding.CharFormat  = Endpoint_Read_8(); | ||||
| 				CDCInterfaceInfo->State.LineEncoding.ParityType  = Endpoint_Read_8(); | ||||
| 				CDCInterfaceInfo->State.LineEncoding.DataBits    = Endpoint_Read_8(); | ||||
| 
 | ||||
| 				Endpoint_ClearOUT(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| 			 | ||||
|  | ||||
| @ -94,6 +94,7 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_Write_8(HIDInterfaceInfo->State.UsingReportProtocol); | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
| @ -124,6 +125,7 @@ void HID_Device_ProcessControlRequest(USB_ClassInfo_HID_Device_t* const HIDInter | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_Write_8(HIDInterfaceInfo->State.IdleCount >> 2); | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
|  | ||||
| @ -61,6 +61,7 @@ void MS_Device_ProcessControlRequest(USB_ClassInfo_MS_Device_t* const MSInterfac | ||||
| 			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) | ||||
| 			{ | ||||
| 				Endpoint_ClearSETUP(); | ||||
| 				while (!(Endpoint_IsINReady())); | ||||
| 				Endpoint_Write_8(MSInterfaceInfo->Config.TotalLUNs - 1); | ||||
| 				Endpoint_ClearIN(); | ||||
| 				Endpoint_ClearStatusStage(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dean Camera
						Dean Camera