Fixed ISR definition conflict in the XPLAIN bridge between the software UART and...
[pub/USBasp.git] / LUFA / Drivers / Peripheral / Serial.h
index 103c7db..47f65ea 100644 (file)
                         */
                        #define SERIAL_2X_UBBRVAL(baud) ((((F_CPU / 8) + (baud / 2)) / (baud)) - 1)
 
-               /* Pseudo-Function Macros: */
-                       #if defined(__DOXYGEN__)
-                               /** Indicates whether a character has been received through the USART.
-                                *
-                                *  \return Boolean true if a character has been received, false otherwise.
-                                */
-                               static inline bool Serial_IsCharReceived(void);
-                       #else
-                               #define Serial_IsCharReceived() ((UCSR1A & (1 << RXC1)) ? true : false)
-                       #endif
-
                /* Function Prototypes: */
                        /** Transmits a given string located in program space (FLASH) through the USART.
                         *
                         *  \param[in] FlashStringPtr  Pointer to a string located in program space.
                         */
-                       void Serial_TxString_P(const char *FlashStringPtr) ATTR_NON_NULL_PTR_ARG(1);
+                       void Serial_TxString_P(const charFlashStringPtr) ATTR_NON_NULL_PTR_ARG(1);
 
                        /** Transmits a given string located in SRAM memory through the USART.
                         *
                         *  \param[in] StringPtr  Pointer to a string located in SRAM space.
                         */
-                       void Serial_TxString(const char *StringPtr) ATTR_NON_NULL_PTR_ARG(1);
+                       void Serial_TxString(const charStringPtr) ATTR_NON_NULL_PTR_ARG(1);
 
                /* Inline Functions: */
                        /** Initializes the USART, ready for serial data transmission and reception. This initializes the interface to
                         *  \param[in] BaudRate     Serial baud rate, in bits per second.
                         *  \param[in] DoubleSpeed  Enables double speed mode when set, halving the sample time to double the baud rate.
                         */
-                       static inline void Serial_Init(const uint32_t BaudRate, const bool DoubleSpeed)
+                       static inline void Serial_Init(const uint32_t BaudRate,
+                                                      const bool DoubleSpeed)
                        {
+                               UBRR1  = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
+
+                               UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
                                UCSR1A = (DoubleSpeed ? (1 << U2X1) : 0);
                                UCSR1B = ((1 << TXEN1)  | (1 << RXEN1));
-                               UCSR1C = ((1 << UCSZ11) | (1 << UCSZ10));
                                
-                               DDRD  |= (1 << 3);      
+                               DDRD  |= (1 << 3);
                                PORTD |= (1 << 2);
-                               
-                               UBRR1  = (DoubleSpeed ? SERIAL_2X_UBBRVAL(BaudRate) : SERIAL_UBBRVAL(BaudRate));
                        }
 
                        /** Turns off the USART driver, disabling and returning used hardware to their default configuration. */
                        static inline void Serial_ShutDown(void)
                        {
-                               UCSR1A = 0;
                                UCSR1B = 0;
+                               UCSR1A = 0;
                                UCSR1C = 0;
+
+                               UBRR1  = 0;
                                
-                               DDRD  &= ~(1 << 3);     
+                               DDRD  &= ~(1 << 3);
                                PORTD &= ~(1 << 2);
-                               
-                               UBRR1  = 0;
+                       }
+
+                       /** Indicates whether a character has been received through the USART.
+                        *
+                        *  \return Boolean true if a character has been received, false otherwise.
+                        */
+                       static inline bool Serial_IsCharReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
+                       static inline bool Serial_IsCharReceived(void)
+                       {
+                               return ((UCSR1A & (1 << RXC1)) ? true : false);
                        }
                        
                        /** Transmits a given byte through the USART.
                         *
                         *  \param[in] DataByte  Byte to transmit through the USART.
                         */
+                       static inline void Serial_TxByte(const char DataByte) ATTR_ALWAYS_INLINE;
                        static inline void Serial_TxByte(const char DataByte)
                        {
                                while (!(UCSR1A & (1 << UDRE1)));
                                UDR1 = DataByte;
                        }
 
-                       /** Receives a byte from the USART.
+                       /** Receives a byte from the USART. This function blocks until a byte has been
+                        *  received; if non-blocking behaviour is required, test for a received character
+                        *  beforehand with \ref Serial_IsCharReceived().
                         *
                         *  \return Byte received from the USART.
                         */
+                       static inline char Serial_RxByte(void) ATTR_ALWAYS_INLINE;
                        static inline char Serial_RxByte(void)
                        {
                                while (!(UCSR1A & (1 << RXC1)));