hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/* SPDX-License-Identifier: BSD-3-Clause */
/*
   usa90msg.h
 
   Copyright (c) 1998-2003 InnoSys Incorporated.  All Rights Reserved
   This file is available under a BSD-style copyright
 
   Keyspan USB Async Message Formats for the USA19HS
 
   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions are
   met:
 
   1. Redistributions of source code must retain this licence text
       without modification, this list of conditions, and the following
       disclaimer.  The following copyright notice must appear immediately at
       the beginning of all source files:
 
            Copyright (c) 1998-2003 InnoSys Incorporated.  All Rights Reserved
 
            This file is available under a BSD-style copyright
 
   2. The name of InnoSys Incorporated may not be used to endorse or promote
       products derived from this software without specific prior written
       permission.
 
   THIS SOFTWARE IS PROVIDED BY INNOSYS CORP. ``AS IS'' AND ANY EXPRESS OR
   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
   NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   SUCH DAMAGE.    
 
   Revisions:
 
   2003feb14        add setTxMode/txMode  and cancelRxXoff to portControl
   2003mar21        change name of PARITY_0/1 to add MARK/SPACE
*/
 
#ifndef    __USA90MSG__
#define    __USA90MSG__
 
struct keyspan_usa90_portControlMessage
{
   /*
       there are three types of "commands" sent in the control message:
 
       1.    configuration changes which must be requested by setting
           the corresponding "set" flag (and should only be requested
           when necessary, to reduce overhead on the device):
   */
 
   u8    setClocking,    // host requests baud rate be set
       baudLo,            // host does baud divisor calculation
       baudHi,            // host does baud divisor calculation 
       
       setLcr,            // host requests lcr be set
       lcr,            // use PARITY, STOPBITS, DATABITS below
       
       setRxMode,        // set receive mode
       rxMode,            // RXMODE_DMA or RXMODE_BYHAND
 
       setTxMode,        // set transmit mode
       txMode,            // TXMODE_DMA or TXMODE_BYHAND
 
       setTxFlowControl,    // host requests tx flow control be set
       txFlowControl    ,    // use TX_FLOW... bits below
       setRxFlowControl,    // host requests rx flow control be set
       rxFlowControl,    // use RX_FLOW... bits below
       sendXoff,        // host requests XOFF transmitted immediately
       sendXon,        // host requests XON char transmitted
       xonChar,        // specified in current character format
       xoffChar,        // specified in current character format
 
       sendChar,        // host requests char transmitted immediately
       txChar,            // character to send
 
       setRts,            // host requests RTS output be set
       rts,            // 1=on, 0=off
       setDtr,         // host requests DTR output be set
       dtr;            // 1=on, 0=off
 
   
   /*
       2.    configuration data which is simply used as is 
           and must be specified correctly in every host message.
   */
 
   u8    rxForwardingLength,  // forward when this number of chars available
       rxForwardingTimeout, // (1-31 in ms)
       txAckSetting;       // 0=don't ack, 1=normal, 2-255 TBD...
   /*
       3.    Firmware states which cause actions if they change                    
       and must be specified correctly in every host message.
   */
 
   u8    portEnabled,    // 0=disabled, 1=enabled
       txFlush,        // 0=normal, 1=toss outbound data
       txBreak,        // 0=break off, 1=break on
       loopbackMode;    // 0=no loopback, 1=loopback enabled
 
   /*
       4.    commands which are flags only; these are processed in order
           (so that, e.g., if rxFlush and rxForward flags are set, the
           port will have no data to forward); any non-zero value 
           is respected
   */
 
   u8    rxFlush,        // toss inbound data
       rxForward,        // forward all inbound data, NOW (as if fwdLen==1)
       cancelRxXoff,    // cancel any receive XOFF state (_txXoff)
       returnStatus;    // return current status NOW
};
 
// defines for bits in lcr
#define        USA_DATABITS_5        0x00
#define        USA_DATABITS_6        0x01
#define        USA_DATABITS_7        0x02
#define        USA_DATABITS_8        0x03
#define        STOPBITS_5678_1        0x00    // 1 stop bit for all byte sizes
#define        STOPBITS_5_1p5        0x04    // 1.5 stop bits for 5-bit byte
#define        STOPBITS_678_2        0x04    // 2 stop bits for 6-8 bit byte
#define        USA_PARITY_NONE        0x00
#define        USA_PARITY_ODD        0x08
#define        USA_PARITY_EVEN        0x18
#define        PARITY_MARK_1          0x28       // force parity MARK
#define        PARITY_SPACE_0         0x38    // force parity SPACE
 
#define        TXFLOW_CTS            0x04    
#define        TXFLOW_DSR            0x08
#define        TXFLOW_XOFF            0x01    
#define        TXFLOW_XOFF_ANY        0x02    
#define        TXFLOW_XOFF_BITS    (TXFLOW_XOFF | TXFLOW_XOFF_ANY)
 
#define        RXFLOW_XOFF            0x10    
#define        RXFLOW_RTS            0x20    
#define        RXFLOW_DTR            0x40
#define        RXFLOW_DSR_SENSITIVITY    0x80
 
#define        RXMODE_BYHAND        0x00    
#define        RXMODE_DMA            0x02    
 
#define        TXMODE_BYHAND        0x00    
#define        TXMODE_DMA            0x02    
 
 
// all things called "StatusMessage" are sent on the status endpoint
 
struct keyspan_usa90_portStatusMessage    
{
   u8    msr,            // reports the actual MSR register
       cts,            // reports CTS pin
       dcd,            // reports DCD pin
       dsr,            // reports DSR pin
       ri,                // reports RI pin
       _txXoff,        // port is in XOFF state (we received XOFF)
       rxBreak,        // reports break state
       rxOverrun,        // count of overrun errors (since last reported)
       rxParity,        // count of parity errors (since last reported)
       rxFrame,        // count of frame errors (since last reported)
       portState,        // PORTSTATE_xxx bits (useful for debugging)
       messageAck,        // message acknowledgement
       charAck,        // character acknowledgement
       controlResponse;    // (value = returnStatus) a control message has been processed 
};
 
// bits in RX data message when STAT byte is included
 
#define    RXERROR_OVERRUN        0x02
#define    RXERROR_PARITY        0x04
#define    RXERROR_FRAMING        0x08
#define    RXERROR_BREAK        0x10
 
#define    PORTSTATE_ENABLED    0x80
#define    PORTSTATE_TXFLUSH    0x01
#define    PORTSTATE_TXBREAK    0x02
#define    PORTSTATE_LOOPBACK     0x04
 
// MSR bits
 
#define USA_MSR_dCTS              0x01        // CTS has changed since last report    
#define USA_MSR_dDSR              0x02
#define USA_MSR_dRI            0x04
#define USA_MSR_dDCD              0x08
 
#define USA_MSR_CTS            0x10          // current state of CTS
#define USA_MSR_DSR            0x20
#define USA_USA_MSR_RI            0x40
#define MSR_DCD                0x80
 
// ie: the maximum length of an endpoint buffer
#define        MAX_DATA_LEN            64
 
#endif