Mercurial > flash_v2
annotate packages/io/serial/current/include/serial.h @ 128:0c2b7be0d798 ecos-sw-2000-10-12
Merge from eCos master repository on 2000-10-12-08:46:24-BST
| author | jlarmour |
|---|---|
| date | Thu, 12 Oct 2000 20:31:43 +0000 |
| parents | 518f42066aba |
| children | e0c0827131d1 |
| 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 | |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
63 // The block transfer request functions may fail for one of two |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
64 // reasons. It's important for the caller to know which. |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
65 typedef enum { |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
66 CYG_RCV_OK, |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
67 CYG_RCV_FULL, |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
68 CYG_RCV_DISABLED |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
69 } rcv_req_reply_t; |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
70 |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
71 typedef enum { |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
72 CYG_XMT_OK, |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
73 CYG_XMT_EMPTY, |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
74 CYG_XMT_DISABLED |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
75 } xmt_req_reply_t; |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
76 |
| 2 | 77 // Pointers into upper-level driver which interrupt handlers need |
| 78 typedef struct { | |
| 79 // Initialize the channel | |
| 80 void (*serial_init)(serial_channel *chan); | |
| 81 // Cause an additional character to be output if one is available | |
| 82 void (*xmt_char)(serial_channel *chan); | |
| 83 // Consume an input character | |
| 84 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
|
85 #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
|
86 // Request space for input characters |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
87 rcv_req_reply_t (*data_rcv_req)(serial_channel *chan, int avail, |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
88 int* space_avail, unsigned char** space); |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
89 // Receive operation completed |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
90 void (*data_rcv_done)(serial_channel *chan, int chars_rcvd); |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
91 // Request characters for transmission |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
92 xmt_req_reply_t (*data_xmt_req)(serial_channel *chan, int space, |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
93 int* chars_avail, unsigned char** chars); |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
94 // Transmit operation completed |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
95 void (*data_xmt_done)(serial_channel *chan, int chars_sent); |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
96 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
97 #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
|
98 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
|
99 #endif |
| 2 | 100 } serial_callbacks_t; |
| 101 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
102 #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
|
103 # 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
|
104 # 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
|
105 serial_callbacks_t _l = { \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
106 _init, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
107 _xmt_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
108 _rcv_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
109 _data_rcv_req, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
110 _data_rcv_done, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
111 _data_xmt_req, \ |
|
126
518f42066aba
Merge from eCos master repository on 2000-09-19-06:25:26-BST
jlarmour
parents:
115
diff
changeset
|
112 _data_xmt_done, \ |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
113 _indicate_status \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
114 }; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
115 # else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
116 # 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
|
117 serial_callbacks_t _l = { \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
118 _init, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
119 _xmt_char, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
120 _rcv_char, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
121 _data_rcv_req, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
122 _data_rcv_done, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
123 _data_xmt_req, \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
124 _data_xmt_done \ |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
125 }; |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
126 # endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
127 #else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
128 # 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
|
129 # 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
|
130 serial_callbacks_t _l = { \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
131 _init, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
132 _xmt_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
133 _rcv_char, \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
134 _indicate_status \ |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
135 }; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
136 # else |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
137 # define SERIAL_CALLBACKS(_l,_init,_xmt_char,_rcv_char) \ |
| 2 | 138 serial_callbacks_t _l = { \ |
| 139 _init, \ | |
| 140 _xmt_char, \ | |
| 141 _rcv_char \ | |
| 142 }; | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
143 # endif |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
144 #endif |
| 2 | 145 |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
146 extern serial_callbacks_t cyg_io_serial_callbacks; |
| 2 | 147 |
| 148 typedef struct { | |
| 149 unsigned char *data; | |
| 150 volatile int put; | |
| 151 volatile int get; | |
| 152 int len; | |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
153 volatile int nb; // count of bytes currently in buffer |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
154 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
|
155 // 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
|
156 #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
|
157 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
|
158 // 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
|
159 #endif |
| 2 | 160 cyg_drv_cond_t wait; |
| 161 cyg_drv_mutex_t lock; | |
| 162 bool waiting; | |
|
86
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
163 #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
|
164 bool blocking; |
|
6512add4f5d6
Merge from eCos master repository on 2000-05-05-07:47:05-BST
jlarmour
parents:
66
diff
changeset
|
165 #endif |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
166 volatile bool abort; // Set by an outsider to kill processing |
| 2 | 167 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
|
168 #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
|
169 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
|
170 #endif |
|
128
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
171 |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
172 #ifdef CYGDBG_USE_ASSERTS |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
173 #ifdef CYGINT_IO_SERIAL_BLOCK_TRANSFER |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
174 bool block_mode_xfer_running; |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
175 #endif // CYGINT_IO_SERIAL_BLOCK_TRANSFER |
|
0c2b7be0d798
Merge from eCos master repository on 2000-10-12-08:46:24-BST
jlarmour
parents:
126
diff
changeset
|
176 #endif // CYGDBG_USE_ASSERTS |
| 2 | 177 } cbuf_t; |
| 178 | |
| 179 #define CBUF_INIT(_data, _len) \ | |
| 180 {_data, 0, 0, _len} | |
| 181 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
182 #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
|
183 typedef struct { |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
184 cyg_uint32 flags; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
185 #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
|
186 cyg_uint8 xchar; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
187 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
188 } flow_desc_t; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
189 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
190 |
| 2 | 191 // Private data which describes this channel |
| 192 struct serial_channel { | |
| 193 serial_funs *funs; | |
| 194 serial_callbacks_t *callbacks; | |
| 195 void *dev_priv; // Whatever is needed by actual device routines | |
| 196 cyg_serial_info_t config; // Current configuration | |
| 197 bool init; | |
| 198 cbuf_t out_cbuf; | |
| 199 cbuf_t in_cbuf; | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
200 #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
|
201 flow_desc_t flow_desc; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
202 #endif |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
203 #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
|
204 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
|
205 CYG_ADDRWORD status_callback_priv; |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
206 #endif |
| 2 | 207 }; |
| 208 | |
|
115
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
209 // Flow descriptor flag values |
|
6ed91473a1cd
Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents:
86
diff
changeset
|
210 #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
|
211 #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
|
212 |
| 2 | 213 // Initialization macro for serial channel |
| 214 #define SERIAL_CHANNEL(_l, \ | |
| 215 _funs, \ | |
| 216 _dev_priv, \ | |
| 217 _baud, _stop, _parity, _word_length, _flags) \ | |
| 218 serial_channel _l = { \ | |
| 219 &_funs, \ | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
220 &cyg_io_serial_callbacks, \ |
| 2 | 221 &(_dev_priv), \ |
| 222 CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags), \ | |
| 223 }; | |
| 224 | |
| 225 #define SERIAL_CHANNEL_USING_INTERRUPTS(_l, \ | |
| 226 _funs, \ | |
| 227 _dev_priv, \ | |
| 228 _baud, _stop, _parity, _word_length, _flags, \ | |
| 229 _out_buf, _out_buflen, \ | |
| 230 _in_buf, _in_buflen) \ | |
| 231 serial_channel _l = { \ | |
| 232 &_funs, \ | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
233 &cyg_io_serial_callbacks, \ |
| 2 | 234 &(_dev_priv), \ |
| 235 CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags), \ | |
| 236 false, \ | |
| 237 CBUF_INIT(_out_buf, _out_buflen), \ | |
| 238 CBUF_INIT(_in_buf, _in_buflen) \ | |
| 239 }; | |
| 240 | |
| 241 // Low level interface functions | |
| 242 struct serial_funs { | |
| 243 // Send one character to the output device, return true if consumed | |
| 244 bool (*putc)(serial_channel *priv, unsigned char c); | |
| 245 // Fetch one character from the device | |
| 246 unsigned char (*getc)(serial_channel *priv); | |
| 247 // 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
|
248 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
|
249 cyg_uint32 *len); |
| 2 | 250 // Enable the transmit channel and turn on transmit interrupts |
| 251 void (*start_xmit)(serial_channel *priv); | |
| 252 // Disable the transmit channel and turn transmit interrupts off | |
| 253 void (*stop_xmit)(serial_channel *priv); | |
| 254 }; | |
| 255 | |
| 256 #define SERIAL_FUNS(_l,_putc,_getc,_set_config,_start_xmit,_stop_xmit) \ | |
| 257 serial_funs _l = { \ | |
| 258 _putc, \ | |
| 259 _getc, \ | |
| 260 _set_config, \ | |
| 261 _start_xmit, \ | |
| 262 _stop_xmit \ | |
| 263 }; | |
| 264 | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
6
diff
changeset
|
265 extern cyg_devio_table_t cyg_io_serial_devio; |
| 2 | 266 |
| 267 #endif // CYGONCE_SERIAL_H |
