/*
LUFA Library
- Copyright (C) Dean Camera, 2010.
-
+ Copyright (C) Dean Camera, 2011.
+
dean [at] fourwalledcubicle [dot] com
- www.fourwalledcubicle.com
+ www.lufa-lib.org
*/
/*
- Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com)
- Permission to use, copy, modify, distribute, and sell this
+ Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
+ without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
The author disclaim all warranties with regard to this
* \brief Standard avr-libc character stream driver for the USART.
*
* Serial stream driver for the USART subsystem on supported USB AVRs. This makes use of the functions in the
- * regular USART driver (see \ref Group_Serial), but allows the avr-libc standard stream functions (printf,
- * puts, etc.) to work with the
+ * regular USART driver (see \ref Group_Serial), but allows the avr-libc standard stream functions (\c printf,
+ * \c puts, etc.) to work with the
* USART.
*/
*
* \section Sec_Dependencies Module Source Dependencies
* The following files must be built with any user project that uses this module:
- * - LUFA/Drivers/Peripheral/SerialStream.c
+ * - LUFA/Drivers/Peripheral/SerialStream.c <i>(Makefile source module name: LUFA_SRC_SERIALSTREAM)</i>
*
- * \section Module Description
+ * \section Sec_ModDescription Module Description
* Serial stream driver for the USART subsystem on supported USB AVRs. This makes use of the functions in the
- * regular USART driver (see \ref Group_Serial), but allows the avr-libc standard stream functions (printf,
- * puts, etc.) to work with the
- * USART.
+ * regular USART driver (see \ref Group_Serial), but allows the avr-libc standard stream functions (\c printf,
+ * \c puts, etc.) to work with the USART. Upon configuration, this will redirect the \c stdin standard input
+ * and \c stdout output streams to the USART.
+ *
+ * \section Sec_ExampleUsage Example Usage
+ * The following snippet is an example of how this module may be used within a typical
+ * application.
+ *
+ * \code
+ * // Initialise the Serial Stream driver before first use, with 9600 baud (and no double-speed mode)
+ * SerialStream_Init(9600, false);
+ *
+ * // Write a string to the USART via the implicit stdout stream
+ * printf("Test String using stdout\r\n");
+ *
+ * // Write a string to the USART via the explicit USART stream
+ * fprintf(&USARTStream, "Test String using explicit stream handle\r\n");
+ *
+ * // Read in an integer from the USART using the implicit stdin stream
+ * uint16_t TestValue;
+ * scanf("%d", &TestValue);
+ * \endcode
*
* @{
*/
/* Includes: */
#include <avr/io.h>
#include <stdio.h>
-
+
#include "Serial.h"
-
+
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
- /* Private Interface - For use in library only: */
+ /* Private Interface - For use in library only: */
#if !defined(__DOXYGEN__)
- /* External Variables: */
- extern FILE USARTStream;
-
/* Function Prototypes: */
#if defined(__INCLUDE_FROM_SERIALSTREAM_C)
- static int SerialStream_TxByte(char DataByte, FILE *Stream) ATTR_NON_NULL_PTR_ARG(2);
+ static int SerialStream_TxByte(char DataByte,
+ FILE *Stream) ATTR_NON_NULL_PTR_ARG(2);
static int SerialStream_RxByte(FILE *Stream) ATTR_NON_NULL_PTR_ARG(1);
#endif
#endif
/* Public Interface - May be used in end-application: */
+ /* External Variables: */
+ /** Named stream for the USART, once \ref SerialStream_Init() has been called. This may be used with the
+ * file based stream functions (fprintf, fscanf, etc.) that require a handle to the stream rather than
+ * using the stdin and stdout named streams.
+ */
+ extern FILE USARTStream;
+
/* Inline Functions: */
- /** Initializes the serial stream (and regular USART driver) so that both the stream and regular
+ /** Initialises the serial stream (and regular USART driver) so that both the stream and regular
* USART driver functions can be used. Must be called before any stream or regular USART functions.
*
- * \param[in] BaudRate Baud rate to configure the USART to
- * \param[in] DoubleSpeed Enables double speed mode when set, halving the sample time to double the baud rate
+ * \param[in] BaudRate Baud rate to configure the USART to.
+ * \param[in] DoubleSpeed Enables double speed mode when set, halving the sample time to double the baud rate.
*/
- static inline void SerialStream_Init(const uint32_t BaudRate, const bool DoubleSpeed)
+ static inline void SerialStream_Init(const uint32_t BaudRate,
+ const bool DoubleSpeed)
{
Serial_Init(BaudRate, DoubleSpeed);
-
+
stdout = &USARTStream;
stdin = &USARTStream;
}
-
+
/** Turns off the serial stream (and regular USART driver), disabling and returning used hardware to
* their default configuration.
*/
static inline void SerialStream_ShutDown(void)
{
Serial_ShutDown();
- }
+ }
/* Disable C linkage for C++ Compilers: */
#if defined(__cplusplus)
#endif
/** @} */
+