Fix off-by-one bug in [v]snprintf().
[bertos.git] / drv / ser.h
index 918e7a76c825e4062705759c990e6a2ce067e7da..ad43d47cf8238eade0a5315d259f68a69bec37f3 100755 (executable)
--- a/drv/ser.h
+++ b/drv/ser.h
 
 /*#*
  *#* $Log$
+ *#* Revision 1.16  2004/10/19 11:48:05  bernie
+ *#* Reformat.
+ *#*
+ *#* Revision 1.15  2004/10/19 08:11:53  bernie
+ *#* SERRF_TX, SERRF_RX: New macros; Enhance documentation.
+ *#*
+ *#* Revision 1.14  2004/10/03 18:43:18  bernie
+ *#* Fix a nasty bug caused by confusion between old-style and new-style configuration macros.
+ *#*
+ *#* Revision 1.13  2004/09/14 21:04:57  bernie
+ *#* Don't vanely call kdebug.h.
+ *#*
+ *#* Revision 1.12  2004/09/06 21:40:50  bernie
+ *#* Move buffer handling in chip-specific driver.
+ *#*
  *#* Revision 1.11  2004/08/25 14:12:08  rasky
  *#* Aggiornato il comment block dei log RCS
  *#*
 #define DRV_SER_H
 
 #include <mware/fifobuf.h>
-#include <drv/kdebug.h>
 #include <compiler.h>
 #include <config.h>
 
-/*!
- * \name Serial Error/status flags
- *
- * Some of these flags map directly to the flags
- * in AVR UART Status Register(USR).
- * \todo  flags of DSP56k aren't mapped to these flags. Luckily
- *        these flags doesn't collide with the DSP56k ones,
- *        which are from 0x0100 to 0x8000
- */
+/*! \name Serial Error/status flags. */
 /*\{*/
 #if CPU_AVR
        typedef uint8_t serstatus_t;
        #define SERRF_RXTIMEOUT      BV(5)  /*!< Receive timeout */
        #define SERRF_TXTIMEOUT      BV(6)  /*!< Transmit timeout */
 
-       /* Hardware errors */
+       /*
+        * Hardware errors.
+         * These flags map directly to the AVR UART Status Register (USR).
+        */
        #define SERRF_RXSROVERRUN    BV(3)  /*!< Rx shift register overrun */
        #define SERRF_FRAMEERROR     BV(4)  /*!< Stop bit missing */
        #define SERRF_PARITYERROR    BV(7)  /*!< Parity error */
+       #define SERRF_NOISEERROR     0      /*!< Unsupported */
 #elif CPU_DSP56K
        typedef uint16_t serstatus_t;
 
        #define SERRF_RXTIMEOUT      BV(1)  /*!< Receive timeout */
        #define SERRF_TXTIMEOUT      BV(2)  /*!< Transmit timeout */
 
-       /* Hardware errors */
+       /*
+        * Hardware errors.
+        * These flags map directly to the SCI Control Register.
+        */
        #define SERRF_PARITYERROR    BV(8)  /*!< Parity error */
        #define SERRF_FRAMEERROR     BV(9)  /*!< Stop bit missing */
        #define SERRF_NOISEERROR     BV(10) /*!< Noise error */
 #endif
 /*\}*/
 
-/*! \name Parity settings for ser_setparity() */
+/*! \name Masks to group TX/RX errors. */
+/*\{*/
+#define SERRF_RX  (SERRF_RXFIFOOVERRUN \
+       | SERRF_RXTIMEOUT \
+       | SERRF_RXSROVERRUN \
+       | SERRF_PARITYERROR \
+       | SERRF_FRAMEERROR \
+       | SERRF_NOISEERROR)
+#define SERRF_TX  (SERRF_TXTIMEOUT)
+/*\}*/
+
+
+/*!
+ * \name Parity settings for ser_setparity().
+ *
+ * \note Values are AVR-specific for performance reasons.
+ *       Other processors should either decode them or
+ *       redefine these macros.
+ */
 /*\{*/
 #define SER_PARITY_NONE  0
 #define SER_PARITY_EVEN  2
  */
 enum
 {
-#if defined(CPU_AVR_ATMEGA64) || defined(CPU_AVR_ATMEGA128)
+#if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128
        SER_UART0,
        SER_UART1,
        SER_SPI,
-#elif defined(CPU_AVR_ATMEGA103) || defined(CPU_AVR_ATMEGA8)
+#elif CPU_AVR_ATMEGA103 || CPU_AVR_ATMEGA8
        SER_UART0,
        SER_SPI,
 #elif CPU_DSP56K
@@ -136,10 +167,12 @@ struct Serial
        /*! Physical port number */
        unsigned int unit;
 
-       DB(bool is_open;)
+#ifdef _DEBUG
+       bool is_open;
+#endif
 
        /*!
-        * \name FIFO transmit and receive buffers.
+        * \name Transmit and receive FIFOs.
         *
         * Declared volatile because handled asinchronously by interrupts.
         *
@@ -147,8 +180,6 @@ struct Serial
         */
        FIFOBuffer txfifo;
        FIFOBuffer rxfifo;
-       unsigned char txbuffer[CONFIG_SER_TXBUFSIZE];
-       unsigned char rxbuffer[CONFIG_SER_RXBUFSIZE];
        /* \} */
 
 #if CONFIG_SER_RXTIMEOUT != -1