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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_SERIAL_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_SERIAL_H
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // serial.h
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 // Device I/O
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // Author(s): gthomas
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Contributors: gthomas
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 // Date: 1999-02-04
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 // Purpose: Internal interfaces for serial I/O drivers
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 // Description:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 // ====================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // Serial I/O interfaces
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 #include <cyg/infra/cyg_type.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 #include <cyg/io/io.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #include <cyg/io/serialio.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 #include <cyg/hal/drv_api.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 typedef struct serial_channel serial_channel;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 typedef struct serial_funs serial_funs;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 // Pointers into upper-level driver which interrupt handlers need
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 typedef struct {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 // Initialize the channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 void (*serial_init)(serial_channel *chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 // Cause an additional character to be output if one is available
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 void (*xmt_char)(serial_channel *chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 // Consume an input character
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 } serial_callbacks_t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 serial_callbacks_t _l = { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 _init, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 _xmt_char, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 _rcv_char \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 typedef struct {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 unsigned char *data;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150 volatile int put;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 volatile int get;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160 cyg_drv_cond_t wait;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 cyg_drv_mutex_t lock;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 } cbuf_t;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 #define CBUF_INIT(_data, _len) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 {_data, 0, 0, _len}
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 // Private data which describes this channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 struct serial_channel {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 serial_funs *funs;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 serial_callbacks_t *callbacks;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 void *dev_priv; // Whatever is needed by actual device routines
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 cyg_serial_info_t config; // Current configuration
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 bool init;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 cbuf_t out_cbuf;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 // Initialization macro for serial channel
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 #define SERIAL_CHANNEL(_l, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 _funs, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 _dev_priv, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 _baud, _stop, _parity, _word_length, _flags) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 serial_channel _l = { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 &(_dev_priv), \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags), \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 #define SERIAL_CHANNEL_USING_INTERRUPTS(_l, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 _funs, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 _dev_priv, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 _baud, _stop, _parity, _word_length, _flags, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 _out_buf, _out_buflen, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 _in_buf, _in_buflen) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 serial_channel _l = { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 &(_dev_priv), \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 CYG_SERIAL_INFO_INIT(_baud, _stop, _parity, _word_length, _flags), \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 false, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 CBUF_INIT(_out_buf, _out_buflen), \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 CBUF_INIT(_in_buf, _in_buflen) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 // Low level interface functions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 struct serial_funs {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 // Send one character to the output device, return true if consumed
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 bool (*putc)(serial_channel *priv, unsigned char c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 // Fetch one character from the device
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 unsigned char (*getc)(serial_channel *priv);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 // Enable the transmit channel and turn on transmit interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 void (*start_xmit)(serial_channel *priv);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 // Disable the transmit channel and turn transmit interrupts off
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 void (*stop_xmit)(serial_channel *priv);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 #define SERIAL_FUNS(_l,_putc,_getc,_set_config,_start_xmit,_stop_xmit) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 serial_funs _l = { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 _putc, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 _getc, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 _set_config, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 _start_xmit, \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 _stop_xmit \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 };
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 #endif // CYGONCE_SERIAL_H