Added CDC_Host_Flush() function to the CDC Host Class driver to flush sent data to the attached device.
This commit is contained in:
		
							parent
							
								
									b7f6a65c25
								
							
						
					
					
						commit
						1b2cd16976
					
				
					 6 changed files with 57 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -374,6 +374,48 @@ uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
 | 
			
		|||
	return ReceivedByte;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t CDC_Host_Flush(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
 | 
			
		||||
{
 | 
			
		||||
	if ((USB_HostState != HOST_STATE_Configured) || !(CDCInterfaceInfo->State.IsActive))
 | 
			
		||||
	  return PIPE_READYWAIT_DeviceDisconnected;
 | 
			
		||||
	  
 | 
			
		||||
	uint8_t ErrorCode;
 | 
			
		||||
 | 
			
		||||
	if (CDCInterfaceInfo->State.BidirectionalDataEndpoints)
 | 
			
		||||
	{
 | 
			
		||||
		Pipe_SelectPipe(CDCInterfaceInfo->Config.DataINPipeNumber);
 | 
			
		||||
		Pipe_SetPipeToken(PIPE_TOKEN_OUT);
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		Pipe_SelectPipe(CDCInterfaceInfo->Config.DataOUTPipeNumber);	
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	Pipe_Unfreeze();
 | 
			
		||||
	
 | 
			
		||||
	if (!(Pipe_BytesInPipe()))
 | 
			
		||||
	  return PIPE_READYWAIT_NoError;
 | 
			
		||||
 | 
			
		||||
	bool BankFull = !(Pipe_IsReadWriteAllowed());
 | 
			
		||||
 | 
			
		||||
	Pipe_ClearOUT();
 | 
			
		||||
 | 
			
		||||
	if (BankFull)
 | 
			
		||||
	{
 | 
			
		||||
		if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
 | 
			
		||||
		  return ErrorCode;
 | 
			
		||||
 | 
			
		||||
		Pipe_ClearOUT();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Pipe_Freeze();
 | 
			
		||||
 | 
			
		||||
	if (CDCInterfaceInfo->State.BidirectionalDataEndpoints)
 | 
			
		||||
	  Pipe_SetPipeToken(PIPE_TOKEN_IN);
 | 
			
		||||
	
 | 
			
		||||
	return PIPE_READYWAIT_NoError;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, FILE* Stream)
 | 
			
		||||
{
 | 
			
		||||
	*Stream = (FILE)FDEV_SETUP_STREAM(CDC_Host_putchar, CDC_Host_getchar, _FDEV_SETUP_RW);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,6 +214,14 @@
 | 
			
		|||
			 */
 | 
			
		||||
			uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
 | 
			
		||||
			
 | 
			
		||||
			/** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class host configuration and state
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum
 | 
			
		||||
			 */
 | 
			
		||||
			uint8_t CDC_Host_Flush(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
 | 
			
		||||
 | 
			
		||||
			/** Creates a standard characer stream for the given CDC Device instance so that it can be used with all the regular
 | 
			
		||||
			 *  functions in the avr-libc <stdio.h> library that accept a FILE stream as a destination (e.g. fprintf). The created
 | 
			
		||||
			 *  stream is bidirectional and can be used for both input and output functions.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@
 | 
			
		|||
	/* Includes: */
 | 
			
		||||
		#include <avr/pgmspace.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
		#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
		#include "../../../Common/Common.h"
 | 
			
		||||
		#include "USBMode.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue