Mercurial > flash_v2
annotate packages/io/serial/current/include/serial.h @ 115:6ed91473a1cd ecos-sw-2000-08-21
Merge from eCos master repository on 2000-08-21-22:40:54-BST
| author | jlarmour |
|---|---|
| date | Fri, 25 Aug 2000 17:32:38 +0000 |
| parents | 6512add4f5d6 |
| children | 518f42066aba |
| rev | line source |
|---|---|
| 2 | 1 #ifndef CYGONCE_SERIAL_H |
| 2 #define CYGONCE_SERIAL_H | |
| 3 // ==================================================================== | |
| 4 // | |
| 5 // serial.h | |
| 6 // | |
| 7 // Device I/O | |
| 8 // | |
| 9 // ==================================================================== | |
| 10 //####COPYRIGHTBEGIN#### | |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
11 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
12 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
13 // The contents of this file are subject to the Red Hat eCos Public License |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
14 // Version 1.1 (the "License"); you may not use this file except in |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
15 // compliance with the License. You may obtain a copy of the License at |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
16 // http://www.redhat.com/ |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
17 // |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
18 // Software distributed under the License is distributed on an "AS IS" |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
19 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
20 // License for the specific language governing rights and limitations under |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
21 // the License. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
22 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
23 // The Original Code is eCos - Embedded Configurable Operating System, |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
24 // released September 30, 1998. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
25 // |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
26 // The Initial Developer of the Original Code is Red Hat. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
27 // Portions created by Red Hat are |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
28 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
29 // All Rights Reserved. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
30 // ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
31 // |
| 2 | 32 //####COPYRIGHTEND#### |
| 33 // ==================================================================== | |
| 34 //#####DESCRIPTIONBEGIN#### | |
| 35 // | |
| 36 // Author(s): gthomas | |
| 37 // Contributors: gthomas | |
| 38 // Date: 1999-02-04 | |
| 39 // Purpose: Internal interfaces for serial I/O drivers | |
| 40 // Description: | |
| 41 // | |
| 42 //####DESCRIPTIONEND#### | |
| 43 // | |
| 44 // ==================================================================== | |
| 45 | |
| 46 // Serial I/O interfaces | |
| 47 | |
| 48 #include <pkgconf/system.h> | |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
49 #include <pkgconf/io_serial.h> |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
50 |
| 2 | 51 #include <cyg/infra/cyg_type.h> |
| 52 #include <cyg/io/io.h> | |
| 53 #include <cyg/io/serialio.h> | |
| 54 #include <cyg/hal/drv_api.h> | |
| 55 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
56 #ifdef CYGPKG_IO_SERIAL_SELECT_SUPPORT |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
57 #include <cyg/fileio/fileio.h> |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
58 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
59 |
| 2 | 60 typedef struct serial_channel serial_channel; |
| 61 typedef struct serial_funs serial_funs; | |
| 62 | |
| 63 // Pointers into upper-level driver which interrupt handlers need | |
| 64 typedef struct { | |
| 65 // Initialize the channel | |
| 66 void (*serial_init)(serial_channel *chan); | |
| 67 // Cause an additional character to be output if one is available | |
| 68 void (*xmt_char)(serial_channel *chan); | |
| 69 // Consume an input character | |
| 70 void (*rcv_char)(serial_channel *chan, unsigned char c); | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
71 #if CYGINT_IO_SERIAL_BLOCK_TRANSFER |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
72 // Request space for input characters |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
73 bool (*data_rcv_req)(serial_channel *chan, int avail, |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
74 int* space_avail, unsigned char** space); |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
75 // Receive operation completed |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
76 void (*data_rcv_done)(serial_channel *chan); |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
77 // Request characters for transmission |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
78 bool (*data_xmt_req)(serial_channel *chan, int space, |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
79 int* chars_avail, unsigned char** chars); |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
80 // Transmit operation completed |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
81 void (*data_xmt_done)(serial_channel *chan); |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
82 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
83 #if defined(CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS) |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
84 void (*indicate_status)(serial_channel *chan, cyg_serial_line_status_t *s ); |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
85 #endif |
| 2 | 86 } serial_callbacks_t; |
| 87 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
88 #if CYGINT_IO_SERIAL_BLOCK_TRANSFER |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
89 # ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
90 # define SERIAL_CALLBACKS(_l,_init,_xmt_char,_rcv_char, _data_rcv_req, _data_rcv_done, _data_xmt_req, _data_xmt_done, _indicate_status) \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
91 serial_callbacks_t _l = { \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
92 _init, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
93 _xmt_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
94 _rcv_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
95 _data_rcv_req, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
96 _data_rcv_done, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
97 _data_xmt_req, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
98 _data_xmt_done \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
99 _indicate_status \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
100 }; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
101 # else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
102 # define SERIAL_CALLBACKS(_l,_init,_xmt_char,_rcv_char, _data_rcv_req, _data_rcv_done, _data_xmt_req, _data_xmt_done) \ |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
103 serial_callbacks_t _l = { \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
104 _init, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
105 _xmt_char, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
106 _rcv_char, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
107 _data_rcv_req, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
108 _data_rcv_done, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
109 _data_xmt_req, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
110 _data_xmt_done \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
111 }; |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
112 # endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
113 #else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
114 # ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
115 # define SERIAL_CALLBACKS(_l,_init,_xmt_char,_rcv_char,_indicate_status) \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
116 serial_callbacks_t _l = { \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
117 _init, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
118 _xmt_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
119 _rcv_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
120 _indicate_status \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
121 }; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
122 # else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
123 # define SERIAL_CALLBACKS(_l,_init,_xmt_char,_rcv_char) \ |
| 2 | 124 serial_callbacks_t _l = { \ |
| 125 _init, \ | |
| 126 _xmt_char, \ | |
| 127 _rcv_char \ | |
| 128 }; | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
129 # endif |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
130 #endif |
| 2 | 131 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
132 extern serial_callbacks_t cyg_io_serial_callbacks; |
| 2 | 133 |
| 134 typedef struct { | |
| 135 unsigned char *data; | |
| 136 volatile int put; | |
| 137 volatile int get; | |
| 138 int len; | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
139 int nb; // count of bytes currently in buffer |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
140 int low_water; // For tx: min space in buffer before restart |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
141 // For rx: max buffer used before flow unthrottled |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
142 #ifdef CYGPKG_IO_SERIAL_FLOW_CONTROL |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
143 int high_water; // For tx: unused |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
144 // For rx: min buffer used before throttle |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
145 #endif |
| 2 | 146 cyg_drv_cond_t wait; |
| 147 cyg_drv_mutex_t lock; | |
| 148 bool waiting; | |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
149 #ifdef CYGOPT_IO_SERIAL_SUPPORT_NONBLOCKING |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
150 bool blocking; |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
151 #endif |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
152 volatile bool abort; // Set by an outsider to kill processing |
| 2 | 153 volatile cyg_int32 pending; // This many bytes waiting to be sent |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
154 #ifdef CYGPKG_IO_SERIAL_SELECT_SUPPORT |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
155 struct CYG_SELINFO_TAG selinfo; // select info |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
156 #endif |
| 2 | 157 } cbuf_t; |
| 158 | |
| 159 #define CBUF_INIT(_data, _len) \ | |
| 160 {_data, 0, 0, _len} | |
| 161 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
162 #ifdef CYGPKG_IO_SERIAL_FLOW_CONTROL |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
163 typedef struct { |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
164 cyg_uint32 flags; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
165 #ifdef CYGOPT_IO_SERIAL_FLOW_CONTROL_SOFTWARE |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
166 cyg_uint8 xchar; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
167 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
168 } flow_desc_t; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
169 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
170 |
| 2 | 171 // Private data which describes this channel |
| 172 struct serial_channel { | |
| 173 serial_funs *funs; | |
| 174 serial_callbacks_t *callbacks; | |
| 175 void *dev_priv; // Whatever is needed by actual device routines | |
| 176 cyg_serial_info_t config; // Current configuration | |
| 177 bool init; | |
| 178 cbuf_t out_cbuf; | |
| 179 cbuf_t in_cbuf; | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
180 #ifdef CYGPKG_IO_SERIAL_FLOW_CONTROL |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
181 flow_desc_t flow_desc; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
182 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
183 #ifdef CYGOPT_IO_SERIAL_SUPPORT_LINE_STATUS |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
184 cyg_serial_line_status_callback_fn_t status_callback; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
185 CYG_ADDRWORD status_callback_priv; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
186 #endif |
| 2 | 187 }; |
| 188 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
189 // Flow descriptor flag values |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
190 #define CYG_SERIAL_FLOW_OUT_THROTTLED (1<<0) |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
191 #define CYG_SERIAL_FLOW_IN_THROTTLED (1<<1) |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
192 |
| 2 | 193 // Initialization macro for serial channel |
| 194 #define SERIAL_CHANNEL(_l, \ | |
| 195 _funs, \ | |
| 196 _dev_priv, \ | |
| 197 _baud, _stop, _parity, _word_length, _flags) \ | |
| 198 serial_channel _l = { \ | |
| 199 &_funs, \ | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
200 &cyg_io_serial_callbacks, \ |
| 2 | 201 &(_dev_priv), \ |
| 202 CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags), \ | |
| 203 }; | |
| 204 | |
| 205 #define SERIAL_CHANNEL_USING_INTERRUPTS(_l, \ | |
| 206 _funs, \ | |
| 207 _dev_priv, \ | |
| 208 _baud, _stop, _parity, _word_length, _flags, \ | |
| 209 _out_buf, _out_buflen, \ | |
| 210 _in_buf, _in_buflen) \ | |
| 211 serial_channel _l = { \ | |
| 212 &_funs, \ | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
213 &cyg_io_serial_callbacks, \ |
| 2 | 214 &(_dev_priv), \ |
| 215 CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags), \ | |
| 216 false, \ | |
| 217 CBUF_INIT(_out_buf, _out_buflen), \ | |
| 218 CBUF_INIT(_in_buf, _in_buflen) \ | |
| 219 }; | |
| 220 | |
| 221 // Low level interface functions | |
| 222 struct serial_funs { | |
| 223 // Send one character to the output device, return true if consumed | |
| 224 bool (*putc)(serial_channel *priv, unsigned char c); | |
| 225 // Fetch one character from the device | |
| 226 unsigned char (*getc)(serial_channel *priv); | |
| 227 // Change hardware configuration (baud rate, etc) | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
228 Cyg_ErrNo (*set_config)(serial_channel *priv, cyg_uint32 key, const void *xbuf, |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
229 cyg_uint32 *len); |
| 2 | 230 // Enable the transmit channel and turn on transmit interrupts |
| 231 void (*start_xmit)(serial_channel *priv); | |
| 232 // Disable the transmit channel and turn transmit interrupts off | |
| 233 void (*stop_xmit)(serial_channel *priv); | |
| 234 }; | |
| 235 | |
| 236 #define SERIAL_FUNS(_l,_putc,_getc,_set_config,_start_xmit,_stop_xmit) \ | |
| 237 serial_funs _l = { \ | |
| 238 _putc, \ | |
| 239 _getc, \ | |
| 240 _set_config, \ | |
| 241 _start_xmit, \ | |
| 242 _stop_xmit \ | |
| 243 }; | |
| 244 | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
245 extern cyg_devio_table_t cyg_io_serial_devio; |
| 2 | 246 |
| 247 #endif // CYGONCE_SERIAL_H |
