SerialStream.h 4.8 KB
 Dean Camera committed May 08, 2010 1 2 3 /* LUFA Library Copyright (C) Dean Camera, 2010.  4   Dean Camera committed May 08, 2010 5  dean [at] fourwalledcubicle [dot] com  Dean Camera committed Oct 28, 2010 6  www.lufa-lib.org  Dean Camera committed May 08, 2010 7 8 9 10 11 */ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com)  12  Permission to use, copy, modify, distribute, and sell this  Dean Camera committed May 08, 2010 13  software and its documentation for any purpose is hereby granted  14  without fee, provided that the above copyright notice appear in  Dean Camera committed May 08, 2010 15  all copies and that both that the copyright notice and this  16 17 18  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  Dean Camera committed May 08, 2010 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44  software without specific, written prior permission. The author disclaim all warranties with regard to this software, including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software. */ /** \file * \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 * USART. */ /** \ingroup Group_PeripheralDrivers * @defgroup Group_SerialStream Serial Stream Driver - LUFA/Drivers/Peripheral/SerialStream.h * * \section Sec_Dependencies Module Source Dependencies * The following files must be built with any user project that uses this module:  Dean Camera committed Jul 19, 2010 45  * - LUFA/Drivers/Peripheral/SerialStream.c (Makefile source module name: LUFA_SRC_SERIALSTREAM)  Dean Camera committed May 08, 2010 46 47 48 49  * * \section 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,  Dean Camera committed Dec 26, 2010 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67  * puts, etc.) to work with the USART. Upon configuration, this will redirect the standard input and output * streams to the USART. * * Example Usage: * \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  Dean Camera committed May 08, 2010 68 69 70 71 72 73 74 75 76 77  * * @{ */ #ifndef __SERIAL_STREAM_H__ #define __SERIAL_STREAM_H__ /* Includes: */ #include #include  78   Dean Camera committed May 08, 2010 79  #include "Serial.h"  80   Dean Camera committed May 08, 2010 81 82 83 84 85  /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) extern "C" { #endif  86  /* Private Interface - For use in library only: */  Dean Camera committed May 08, 2010 87 88 89  #if !defined(__DOXYGEN__) /* Function Prototypes: */ #if defined(__INCLUDE_FROM_SERIALSTREAM_C)  Dean Camera committed Jul 21, 2010 90 91  static int SerialStream_TxByte(char DataByte, FILE *Stream) ATTR_NON_NULL_PTR_ARG(2);  Dean Camera committed May 08, 2010 92 93 94 95 96 97  static int SerialStream_RxByte(FILE *Stream) ATTR_NON_NULL_PTR_ARG(1); #endif #endif /* Public Interface - May be used in end-application: */ /* Inline Functions: */  Dean Camera committed Jul 30, 2010 98  /** Initialises the serial stream (and regular USART driver) so that both the stream and regular  Dean Camera committed May 08, 2010 99 100  * USART driver functions can be used. Must be called before any stream or regular USART functions. *  Dean Camera committed Jun 17, 2010 101 102  * \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.  Dean Camera committed May 08, 2010 103  */  Dean Camera committed Jul 21, 2010 104 105  static inline void SerialStream_Init(const uint32_t BaudRate, const bool DoubleSpeed)  Dean Camera committed May 08, 2010 106 107  { Serial_Init(BaudRate, DoubleSpeed);  108   Dean Camera committed May 08, 2010 109 110 111  stdout = &USARTStream; stdin = &USARTStream; }  112   Dean Camera committed May 08, 2010 113 114 115 116 117 118  /** 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();  119  }  Dean Camera committed May 08, 2010 120   Dean Camera committed Dec 26, 2010 121 122 123 124 125 126 127  /* 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;  Dean Camera committed May 08, 2010 128 129 130 131 132 133 134 135  /* Disable C linkage for C++ Compilers: */ #if defined(__cplusplus) } #endif #endif /** @} */  136