mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 05:12:33 +01:00 
			
		
		
		
	lufa: Fix console flush #223
Old console sent unneeded empty data every one milli sencond. After this fix console flushes endpoint data bank every 50ms only when needed.
This commit is contained in:
		
							parent
							
								
									5b46031658
								
							
						
					
					
						commit
						fdce0c9cc0
					
				| @ -197,10 +197,24 @@ void EVENT_USB_Device_WakeUp() | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| #ifdef CONSOLE_ENABLE | ||||
| static bool console_flush = false; | ||||
| #define CONSOLE_FLUSH_SET(b)   do { \ | ||||
|     uint8_t sreg = SREG; cli(); console_flush = b; SREG = sreg; \ | ||||
| } while (0) | ||||
| 
 | ||||
| // called every 1ms
 | ||||
| void EVENT_USB_Device_StartOfFrame(void) | ||||
| { | ||||
|     static uint8_t count; | ||||
|     if (++count % 50) return; | ||||
|     count = 0; | ||||
| 
 | ||||
|     if (!console_flush) return; | ||||
|     Console_Task(); | ||||
|     console_flush = false; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /** Event handler for the USB_ConfigurationChanged event.
 | ||||
|  * This is fired when the host sets the current configuration of the USB device after enumeration. | ||||
| @ -491,6 +505,10 @@ int8_t sendchar(uint8_t c) | ||||
|     // Because sendchar() is called so many times, waiting each call causes big lag.
 | ||||
|     static bool timeouted = false; | ||||
| 
 | ||||
|     // prevents Console_Task() from running during sendchar() runs.
 | ||||
|     // or char will be lost. These two function is mutually exclusive.
 | ||||
|     CONSOLE_FLUSH_SET(false); | ||||
| 
 | ||||
|     if (USB_DeviceState != DEVICE_STATE_Configured) | ||||
|         return -1; | ||||
| 
 | ||||
| @ -524,8 +542,12 @@ int8_t sendchar(uint8_t c) | ||||
|     Endpoint_Write_8(c); | ||||
| 
 | ||||
|     // send when bank is full
 | ||||
|     if (!Endpoint_IsReadWriteAllowed()) | ||||
|     if (!Endpoint_IsReadWriteAllowed()) { | ||||
|         while (!(Endpoint_IsINReady())); | ||||
|         Endpoint_ClearIN(); | ||||
|     } else { | ||||
|         CONSOLE_FLUSH_SET(true); | ||||
|     } | ||||
| 
 | ||||
|     Endpoint_SelectEndpoint(ep); | ||||
|     return 0; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 tmk
						tmk