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
				
			
		| 
						 | 
				
			
			@ -60,27 +60,10 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
 | 
			
		|||
			},
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
/* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
 | 
			
		||||
 *       <stdio.h> can be used on the virtual serial port (e.g. fprintf(&USBSerial, "Test"); to print a string).
 | 
			
		||||
/** Standard file stream for the CDC interface when set up, so that the virtual CDC COM port can be
 | 
			
		||||
 *  used like any regular character stream in the C APIs
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int CDC_putchar(char c, FILE *stream)
 | 
			
		||||
{
 | 
			
		||||
	CDC_Device_SendByte(&VirtualSerial_CDC_Interface, c);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int CDC_getchar(FILE *stream)
 | 
			
		||||
{
 | 
			
		||||
	if (!(CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface)))
 | 
			
		||||
	  return -1;
 | 
			
		||||
 | 
			
		||||
	return CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static FILE USBSerial = FDEV_SETUP_STREAM(CDC_putchar, CDC_getchar, _FDEV_SETUP_RW);
 | 
			
		||||
#endif
 | 
			
		||||
static FILE USBSerialStream;
 | 
			
		||||
 | 
			
		||||
/** Main program entry point. This routine contains the overall program flow, including initial
 | 
			
		||||
 *  setup of all components and the main program loop.
 | 
			
		||||
| 
						 | 
				
			
			@ -89,6 +72,9 @@ int main(void)
 | 
			
		|||
{
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
	/* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
 | 
			
		||||
	CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
 | 
			
		||||
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
| 
						 | 
				
			
			@ -143,8 +129,12 @@ void CheckJoystickMovement(void)
 | 
			
		|||
	if ((ReportString != NULL) && (ActionSent == false))
 | 
			
		||||
	{
 | 
			
		||||
		ActionSent = true;
 | 
			
		||||
		
 | 
			
		||||
		CDC_Device_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString));		
 | 
			
		||||
 | 
			
		||||
		// Write the string to the virtual COM port via the created character stream
 | 
			
		||||
		fputs(ReportString, &USBSerialStream);
 | 
			
		||||
 | 
			
		||||
		// Alternatively, without the stream:
 | 
			
		||||
		// CDC_Device_SendString(&VirtualSerial_CDC_Interface, ReportString, strlen(ReportString));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,7 @@
 | 
			
		|||
		#include <avr/wdt.h>
 | 
			
		||||
		#include <avr/power.h>
 | 
			
		||||
		#include <string.h>
 | 
			
		||||
		#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,28 +54,6 @@ USB_ClassInfo_CDC_Host_t VirtualSerial_CDC_Interface =
 | 
			
		|||
				.NotificationPipeDoubleBank = false,
 | 
			
		||||
			},
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
/* NOTE: Here you can set up a standard stream using the created virtual serial port, so that the standard stream functions in
 | 
			
		||||
 *       <stdio.h> can be used on the virtual serial port (e.g. fprintf(&USBSerial, "Test"); to print a string).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int CDC_putchar(char c, FILE *stream)
 | 
			
		||||
{
 | 
			
		||||
	CDC_Host_SendByte(&VirtualSerial_CDC_Interface, c);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int CDC_getchar(FILE *stream)
 | 
			
		||||
{
 | 
			
		||||
	if (!(CDC_Host_BytesReceived(&VirtualSerial_CDC_Interface)))
 | 
			
		||||
	  return -1;
 | 
			
		||||
 | 
			
		||||
	return CDC_Host_ReceiveByte(&VirtualSerial_CDC_Interface);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static FILE USBSerial = FDEV_SETUP_STREAM(CDC_putchar, CDC_getchar, _FDEV_SETUP_RW);
 | 
			
		||||
#endif
 | 
			
		||||
	
 | 
			
		||||
/** Main program entry point. This routine configures the hardware required by the application, then
 | 
			
		||||
 *  enters a loop to run the application tasks in sequence.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue