3870c3ad3bd4c64d65912cb1514bfd7c0ce37fc0
[bertos.git] / drv / ser_simple.h
1 /**
2  * \file
3  * <!--
4  * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
5  * Copyright 2000 Bernardo Innocenti <bernie@codewiz.org>
6  * -->
7  *
8  * \brief Simple serial I/O driver
9  *
10  * \version $Id$
11  * \author Bernardo Innocenti <bernie@develer.com>
12  * \author Francesco Sacchi <batt@develer.com>
13  */
14
15 /*#*
16  *#* $Log$
17  *#* Revision 1.2  2006/07/19 12:56:26  bernie
18  *#* Convert to new Doxygen style.
19  *#*
20  *#* Revision 1.1  2005/04/12 01:37:50  bernie
21  *#* Import into DevLib.
22  *#*
23  *#* Revision 1.5  2004/10/20 13:37:49  batt
24  *#* Change testing of simple serial instead of ARCH_BOOT in sc driver.
25  *#*
26  *#* Revision 1.4  2004/10/15 12:22:04  batt
27  *#* Readd ';' in setstatus macro.
28  *#*
29  *#* Revision 1.3  2004/10/15 12:13:57  batt
30  *#* Correct \brief header.
31  *#*
32  *#* Revision 1.2  2004/10/15 11:54:21  batt
33  *#* Reformat.
34  *#*
35  *#* Revision 1.1  2004/10/13 16:35:36  batt
36  *#* New (simple) serial driver.
37  *#*
38  *#*
39  */
40 #ifndef SER_SIMPLE_H
41 #define SER_SIMPLE_H
42
43 /* For checking which serial driver is linked */
44 #define SER_SIMPLE
45
46 #include <config.h>
47 #include <compiler.h>
48
49
50 #if 0
51 #if CPU_AVR
52         typedef uint8_t serstatus_t;
53
54         /* Software errors */
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 */
58
59         /* Hardware errors */
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 */
63 #else
64         #error unknown architecture
65 #endif
66 /*\}*/
67
68 /**
69  * \name Serial hw numbers
70  *
71  * \{
72  */
73 enum
74 {
75 #if CPU_AVR_ATMEGA64 || CPU_AVR_ATMEGA128
76         SER_UART0,
77         SER_UART1,
78         SER_SPI,
79 #elif CPU_AVR_ATMEGA103 || CPU_AVR_ATMEGA8
80         SER_UART0,
81         SER_SPI,
82 #else
83         #error unknown architecture
84 #endif
85         SER_CNT  /**< Number of serial ports */
86 };
87 /*\}*/
88 #endif
89
90 /** \name Parity settings for ser_setparity() */
91 /*\{*/
92 #define SER_PARITY_NONE  0
93 #define SER_PARITY_EVEN  2
94 #define SER_PARITY_ODD   3
95 /*\}*/
96
97
98 /** Serial handle structure */
99 struct Serial;
100
101 /* Function prototypes */
102 extern int _ser_putchar(int c);
103 extern int _ser_getchar(void);
104 extern int _ser_getchar_nowait(void);
105 /*
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);
108
109 extern int ser_printf(struct Serial *port, const char *format, ...) FORMAT(__printf__, 2, 3);
110
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);
113 */
114 extern int _ser_print(const char *s);
115
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);
120 /*
121 extern void ser_resync(struct Serial *port, time_t delay);
122 extern void ser_drain(struct Serial *port);
123 */
124 extern void _ser_purge(void);
125 extern struct Serial *_ser_open(void);
126 extern void _ser_close(void);
127
128 /**
129  * \name Functions implemented as macros
130  *
131  * \{
132  */
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)
144 /* \} */
145
146 #endif /* SER_SIMPLE_H */