Altered the CDC Deivice and Host Class drivers' receive byte routines, so that no data is indicated by a negative return value.
Added auto flushing of OUT data to the CDC Host Class driver's USBTask function to automatically flush the send pipe buffer.
This commit is contained in:
		
							parent
							
								
									7c8d16fd7a
								
							
						
					
					
						commit
						24e621a8d8
					
				
					 13 changed files with 89 additions and 59 deletions
				
			
		| 
						 | 
				
			
			@ -101,12 +101,12 @@ int main(void)
 | 
			
		|||
		CheckJoystickMovement();
 | 
			
		||||
 | 
			
		||||
		/* Discard all received data on the first CDC interface */
 | 
			
		||||
		while (CDC_Device_BytesReceived(&VirtualSerial1_CDC_Interface))
 | 
			
		||||
		  CDC_Device_ReceiveByte(&VirtualSerial1_CDC_Interface);
 | 
			
		||||
		CDC_Device_ReceiveByte(&VirtualSerial1_CDC_Interface);
 | 
			
		||||
 | 
			
		||||
		/* Echo all received data on the second CDC interface */
 | 
			
		||||
		while (CDC_Device_BytesReceived(&VirtualSerial2_CDC_Interface))
 | 
			
		||||
		  CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface));
 | 
			
		||||
		int16_t ReceivedByte; = CDC_Device_ReceiveByte(&VirtualSerial2_CDC_Interface);
 | 
			
		||||
		if (!(ReceivedByte < 0))
 | 
			
		||||
		  CDC_Device_SendByte(&VirtualSerial2_CDC_Interface, (uint8_t)ReceivedByte);
 | 
			
		||||
		  
 | 
			
		||||
		CDC_Device_USBTask(&VirtualSerial1_CDC_Interface);
 | 
			
		||||
		CDC_Device_USBTask(&VirtualSerial2_CDC_Interface);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,8 +83,7 @@ int main(void)
 | 
			
		|||
		CheckJoystickMovement();
 | 
			
		||||
		 
 | 
			
		||||
		/* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
 | 
			
		||||
		while (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface))
 | 
			
		||||
		  CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
		CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
 | 
			
		||||
		CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
 | 
			
		||||
		USB_USBTask();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,8 +97,7 @@ int main(void)
 | 
			
		|||
		CheckJoystickMovement();
 | 
			
		||||
		 
 | 
			
		||||
		/* Must throw away unused bytes from the host, or it will lock up while waiting for the device */
 | 
			
		||||
		while (CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface))
 | 
			
		||||
		  CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
		CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
 | 
			
		||||
		CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
 | 
			
		||||
		HID_Device_USBTask(&Mouse_HID_Interface);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,10 +111,9 @@ int main(void)
 | 
			
		|||
				if (CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface))
 | 
			
		||||
				{
 | 
			
		||||
					/* Echo received bytes from the attached device through the USART */
 | 
			
		||||
					while (CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface))
 | 
			
		||||
					  putchar(CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface));
 | 
			
		||||
					  
 | 
			
		||||
					CDC_Host_Flush(&VirtualSerial_CDC_Interface);  
 | 
			
		||||
					int16_t ReceivedByte = CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
					if (!(ReceivedByte < 0))
 | 
			
		||||
					  putchar(ReceivedByte);
 | 
			
		||||
				}
 | 
			
		||||
			
 | 
			
		||||
				break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue