Added new stream creation function to the CDC Class drivers, to easily make standard streams from CDC Class driver instances.
This commit is contained in:
		
							parent
							
								
									d6edfe35c8
								
							
						
					
					
						commit
						c1782ac024
					
				
					 9 changed files with 88 additions and 47 deletions
				
			
		| 
						 | 
				
			
			@ -234,4 +234,24 @@ void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_t* const CDC
 | 
			
		|||
	Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CDC_Device_CreateStream(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, FILE* Stream)
 | 
			
		||||
{
 | 
			
		||||
	*Stream = (FILE)FDEV_SETUP_STREAM(CDC_Device_putchar, CDC_Device_getchar, _FDEV_SETUP_RW);
 | 
			
		||||
	fdev_set_udata(Stream, CDCInterfaceInfo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int CDC_Device_putchar(char c, FILE* Stream)
 | 
			
		||||
{
 | 
			
		||||
	CDC_Device_SendByte((USB_ClassInfo_CDC_Device_t*)fdev_get_udata(Stream), c);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int CDC_Device_getchar(FILE* Stream)
 | 
			
		||||
{
 | 
			
		||||
	if (!(CDC_Device_BytesReceived((USB_ClassInfo_CDC_Device_t*)fdev_get_udata(Stream))))
 | 
			
		||||
	  return -1;
 | 
			
		||||
 | 
			
		||||
	return CDC_Device_ReceiveByte((USB_ClassInfo_CDC_Device_t*)fdev_get_udata(Stream));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,7 @@
 | 
			
		|||
		#include "../../USB.h"
 | 
			
		||||
		#include "../Common/CDC.h"
 | 
			
		||||
 | 
			
		||||
		#include <stdio.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
 | 
			
		||||
	/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
| 
						 | 
				
			
			@ -209,10 +210,24 @@
 | 
			
		|||
			 */
 | 
			
		||||
			void CDC_Device_SendControlLineStateChange(USB_ClassInfo_CDC_Device_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).
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note The created stream can be given as stdout if desired to direct the standard output from all <stdio.h> functions
 | 
			
		||||
			 *        to the given CDC interface.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state
 | 
			
		||||
			 *  \param[in,out] Stream  Pointer to a FILE structure where the created stream should be placed
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Device_CreateStream(USB_ClassInfo_CDC_Device_t* CDCInterfaceInfo, FILE* Stream);
 | 
			
		||||
 | 
			
		||||
	/* Private Interface - For use in library only: */
 | 
			
		||||
	#if !defined(__DOXYGEN__)
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			#if defined(INCLUDE_FROM_CDC_CLASS_DEVICE_C)
 | 
			
		||||
				static int CDC_Device_putchar(char c, FILE* Stream);
 | 
			
		||||
				static int CDC_Device_getchar(FILE* Stream);
 | 
			
		||||
				
 | 
			
		||||
				void CDC_Device_Event_Stub(void);
 | 
			
		||||
				void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
 | 
			
		||||
														  ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Device_Event_Stub);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -334,6 +334,26 @@ uint8_t CDC_Host_ReceiveByte(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
 | 
			
		|||
	return ReceivedByte;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
	fdev_set_udata(Stream, CDCInterfaceInfo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int CDC_Host_putchar(char c, FILE* Stream)
 | 
			
		||||
{
 | 
			
		||||
	CDC_Host_SendByte((USB_ClassInfo_CDC_Host_t*)fdev_get_udata(Stream), c);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int CDC_Host_getchar(FILE* Stream)
 | 
			
		||||
{
 | 
			
		||||
	if (!(CDC_Host_BytesReceived((USB_ClassInfo_CDC_Host_t*)fdev_get_udata(Stream))))
 | 
			
		||||
	  return -1;
 | 
			
		||||
 | 
			
		||||
	return CDC_Host_ReceiveByte((USB_ClassInfo_CDC_Host_t*)fdev_get_udata(Stream));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CDC_Host_Event_Stub(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,9 @@
 | 
			
		|||
	/* Includes: */
 | 
			
		||||
		#include "../../USB.h"
 | 
			
		||||
		#include "../Common/CDC.h"
 | 
			
		||||
 | 
			
		||||
		#include <stdio.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		
 | 
			
		||||
	/* Enable C linkage for C++ Compilers: */
 | 
			
		||||
		#if defined(__cplusplus)
 | 
			
		||||
| 
						 | 
				
			
			@ -205,6 +208,17 @@
 | 
			
		|||
			 */
 | 
			
		||||
			uint8_t CDC_Host_ReceiveByte(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).
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \note The created stream can be given as stdout if desired to direct the standard output from all <stdio.h> functions
 | 
			
		||||
			 *        to the given CDC interface.
 | 
			
		||||
			 *
 | 
			
		||||
			 *  \param[in,out] CDCInterfaceInfo  Pointer to a structure containing a CDC Class configuration and state
 | 
			
		||||
			 *  \param[in,out] Stream  Pointer to a FILE structure where the created stream should be placed
 | 
			
		||||
			 */
 | 
			
		||||
			void CDC_Host_CreateStream(USB_ClassInfo_CDC_Host_t* CDCInterfaceInfo, FILE* Stream);
 | 
			
		||||
 | 
			
		||||
			/** CDC class driver event for a control line state change on a CDC host interface. This event fires each time the device notifies
 | 
			
		||||
			 *  the host of a control line state change (containing the virtual serial control line states, such as DCD) and may be hooked in the
 | 
			
		||||
			 *  user program by declaring a handler function with the same name and parameters listed here. The new control line states
 | 
			
		||||
| 
						 | 
				
			
			@ -231,6 +245,9 @@
 | 
			
		|||
 | 
			
		||||
		/* Function Prototypes: */
 | 
			
		||||
			#if defined(INCLUDE_FROM_CDC_CLASS_HOST_C)
 | 
			
		||||
				static int CDC_Host_putchar(char c, FILE* Stream);
 | 
			
		||||
				static int CDC_Host_getchar(FILE* Stream);
 | 
			
		||||
 | 
			
		||||
				void CDC_Host_Event_Stub(void);
 | 
			
		||||
				void EVENT_CDC_Host_ControLineStateChanged(USB_ClassInfo_CDC_Host_t* const CDCInterfaceInfo)
 | 
			
		||||
				                                           ATTR_WEAK ATTR_NON_NULL_PTR_ARG(1) ATTR_ALIAS(CDC_Host_Event_Stub);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue