4 * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
5 * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
8 * \brief Simple serial I/O driver
11 * \author Bernardo Innocenti <bernie@develer.com>
12 * \author Francesco Sacchi <batt@develer.com>
17 *#* Revision 1.2 2006/07/19 12:56:26 bernie
18 *#* Convert to new Doxygen style.
20 *#* Revision 1.1 2005/04/12 01:37:50 bernie
21 *#* Import into DevLib.
23 *#* Revision 1.5 2004/10/20 13:37:49 batt
24 *#* Change testing of simple serial instead of ARCH_BOOT in sc driver.
26 *#* Revision 1.4 2004/10/15 12:22:04 batt
27 *#* Readd ';' in setstatus macro.
29 *#* Revision 1.3 2004/10/15 12:13:57 batt
30 *#* Correct \brief header.
32 *#* Revision 1.2 2004/10/15 11:54:21 batt
35 *#* Revision 1.1 2004/10/13 16:35:36 batt
36 *#* New (simple) serial driver.
43 /* For checking which serial driver is linked */
52 typedef uint8_t serstatus_t;
55 #define SERRF_RXFIFOOVERRUN BV(0) /**< Rx FIFO buffer overrun */
56 #define SERRF_RXTIMEOUT BV(5) /**< Receive timeout */
57 #define SERRF_TXTIMEOUT BV(6) /**< Transmit timeout */
60 #define SERRF_RXSROVERRUN BV(3) /**< Rx shift register overrun */
61 #define SERRF_FRAMEERROR BV(4) /**< Stop bit missing */
62 #define SERRF_PARITYERROR BV(7) /**< Parity error */
64 #error unknown architecture
69 * \name Serial hw numbers
75 #if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128
79 #elif CPU_AVR_ATMEGA103 || CPU_AVR_ATMEGA8
83 #error unknown architecture
85 SER_CNT /**< Number of serial ports */
90 /** \name Parity settings for ser_setparity() */
92 #define SER_PARITY_NONE 0
93 #define SER_PARITY_EVEN 2
94 #define SER_PARITY_ODD 3
98 /** Serial handle structure */
101 /* Function prototypes */
102 extern int _ser_putchar(int c);
103 extern int _ser_getchar(void);
104 extern int _ser_getchar_nowait(void);
106 extern int ser_write(struct Serial *port, const void *buf, size_t len);
107 extern int ser_read(struct Serial *port, void *buf, size_t size);
109 extern int ser_printf(struct Serial *port, const char *format, ...) FORMAT(__printf__, 2, 3);
111 extern int ser_gets(struct Serial *port, char *buf, int size);
112 extern int ser_gets_echo(struct Serial *port, char *buf, int size, bool echo);
114 extern int _ser_print(const char *s);
116 extern void _ser_setbaudrate(unsigned long rate);
117 extern void _ser_setparity(int parity);
118 extern void _ser_settimeouts(void);
119 extern void _ser_setstatus(void);
121 extern void ser_resync(struct Serial *port, time_t delay);
122 extern void ser_drain(struct Serial *port);
124 extern void _ser_purge(void);
125 extern struct Serial *_ser_open(void);
126 extern void _ser_close(void);
129 * \name Functions implemented as macros
133 #define ser_putchar(c, port) _ser_putchar(c)
134 #define ser_getchar(port) _ser_getchar()
135 #define ser_getchar_nowait(port) _ser_getchar_nowait()
136 #define ser_print(port, s) _ser_print(s)
137 #define ser_setbaudrate(port, y) _ser_setbaudrate(y)
138 #define ser_setparity(port, par) _ser_setparity(par)
139 #define ser_settimeouts(port, y, z) _ser_settimeouts()
140 #define ser_purge(port) _ser_purge()
141 #define ser_open(port) _ser_open()
142 #define ser_getstatus(h) 0
143 #define ser_setstatus(h, x) do {(void)(x);} while(0)
146 #endif /* SER_SIMPLE_H */