Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: BSD-3-Clause */
0002 /*
0003     usa26msg.h
0004 
0005     Copyright (C) 1998-2000 InnoSys Incorporated.  All Rights Reserved
0006     This file is available under a BSD-style copyright
0007 
0008     Keyspan USB Async Message Formats for the USA28X
0009 
0010     Redistribution and use in source and binary forms, with or without
0011     modification, are permitted provided that the following conditions are
0012     met:
0013 
0014     1. Redistributions of source code must retain this licence text
0015     without modification, this list of conditions, and the following
0016     disclaimer.  The following copyright notice must appear immediately at
0017     the beginning of all source files:
0018 
0019             Copyright (C) 1998-2000 InnoSys Incorporated.  All Rights Reserved
0020 
0021             This file is available under a BSD-style copyright
0022 
0023     2. The name of InnoSys Incorporated may not be used to endorse or promote
0024     products derived from this software without specific prior written
0025     permission.
0026 
0027     THIS SOFTWARE IS PROVIDED BY INNOSYS CORP. ``AS IS'' AND ANY EXPRESS OR
0028     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0029     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
0030     NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
0031     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
0032     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
0033     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
0034     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
0035     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
0036     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
0037     SUCH DAMAGE.    
0038 
0039     Third revision: USA28X version (aka USA26)
0040 
0041     Buffer formats for RX/TX data messages are not defined by
0042     a structure, but are described here:
0043 
0044     USB OUT (host -> USAxx, transmit) messages contain a 
0045     REQUEST_ACK indicator (set to 0xff to request an ACK at the 
0046     completion of transmit; 0x00 otherwise), followed by data:
0047 
0048         RQSTACK DAT DAT DAT ...
0049 
0050     with a total data length of 63.
0051 
0052     USB IN (USAxx -> host, receive) messages begin with a status
0053     byte in which the 0x80 bit is either:
0054 
0055         (a) 0x80 bit clear
0056             indicates that the bytes following it are all data
0057             bytes:
0058 
0059                 STAT DATA DATA DATA DATA DATA ...
0060 
0061             for a total of up to 63 DATA bytes,
0062 
0063     or:
0064 
0065         (b) 0x80 bit set
0066             indicates that the bytes following alternate data and
0067             status bytes:
0068 
0069                 STAT DATA STAT DATA STAT DATA STAT DATA ...
0070 
0071             for a total of up to 32 DATA bytes.
0072 
0073     The valid bits in the STAT bytes are:
0074 
0075         OVERRUN 0x02
0076         PARITY  0x04
0077         FRAMING 0x08
0078         BREAK   0x10
0079 
0080     Notes:
0081 
0082     (1) The OVERRUN bit can appear in either (a) or (b) format
0083         messages, but the but the PARITY/FRAMING/BREAK bits
0084         only appear in (b) format messages.
0085     (2) For the host to determine the exact point at which the
0086         overrun occurred (to identify the point in the data
0087         stream at which the data was lost), it needs to count
0088         128 characters, starting at the first character of the
0089         message in which OVERRUN was reported; the lost character(s)
0090         would have been received between the 128th and 129th
0091         characters.
0092     (3) An RX data message in which the first byte has 0x80 clear
0093         serves as a "break off" indicator.
0094 
0095     revision history:
0096 
0097     1999feb10   add reportHskiaChanges to allow us to ignore them
0098     1999feb10   add txAckThreshold for fast+loose throughput enhancement
0099     1999mar30   beef up support for RX error reporting
0100     1999apr14   add resetDataToggle to control message
0101     2000jan04   merge with usa17msg.h
0102     2000jun01   add extended BSD-style copyright text
0103     2001jul05   change message format to improve OVERRUN case
0104 
0105     Note on shared names:
0106 
0107     In the case of fields which have been merged between the USA17
0108     and USA26 definitions, the USA26 definition is the first part
0109     of the name and the USA17 definition is the second part of the
0110     name; both meanings are described below.
0111 */
0112 
0113 #ifndef __USA26MSG__
0114 #define __USA26MSG__
0115 
0116 
0117 struct keyspan_usa26_portControlMessage
0118 {
0119     /*
0120         there are three types of "commands" sent in the control message:
0121 
0122         1.  configuration changes which must be requested by setting
0123             the corresponding "set" flag (and should only be requested
0124             when necessary, to reduce overhead on the USA26):
0125     */
0126     u8  setClocking,    // BOTH: host requests baud rate be set
0127         baudLo,     // BOTH: host does baud divisor calculation
0128         baudHi,     // BOTH: baudHi is only used for first port (gives lower rates)
0129         externalClock_txClocking,
0130                     // USA26: 0=internal, other=external
0131                     // USA17: 0=internal, other=external/RI
0132         rxClocking,     // USA17: 0=internal, 1=external/RI, other=external/DSR
0133 
0134 
0135         setLcr,         // BOTH: host requests lcr be set
0136         lcr,            // BOTH: use PARITY, STOPBITS, DATABITS below
0137 
0138         setFlowControl,     // BOTH: host requests flow control be set
0139         ctsFlowControl,     // BOTH: 1=use CTS flow control, 0=don't
0140         xonFlowControl,     // BOTH: 1=use XON/XOFF flow control, 0=don't
0141         xonChar,        // BOTH: specified in current character format
0142         xoffChar,       // BOTH: specified in current character format
0143 
0144         setTxTriState_setRts,
0145                     // USA26: host requests TX tri-state be set
0146                     // USA17: host requests RTS output be set
0147         txTriState_rts,     // BOTH: 1=active (normal), 0=tristate (off)
0148 
0149         setHskoa_setDtr,
0150                     // USA26: host requests HSKOA output be set
0151                     // USA17: host requests DTR output be set
0152         hskoa_dtr,      // BOTH: 1=on, 0=off
0153 
0154         setPrescaler,       // USA26: host requests prescalar be set (default: 13)
0155         prescaler;      // BOTH: specified as N/8; values 8-ff are valid
0156                     // must be set any time internal baud rate is set;
0157                     // must not be set when external clocking is used
0158                     // note: in USA17, prescaler is applied whenever
0159                     // setClocking is requested
0160 
0161     /*
0162         3.  configuration data which is simply used as is (no overhead,
0163             but must be specified correctly in every host message).
0164     */
0165     u8  forwardingLength,  // BOTH: forward when this number of chars available
0166         reportHskiaChanges_dsrFlowControl,
0167                         // USA26: 1=normal; 0=ignore external clock
0168                         // USA17: 1=use DSR flow control, 0=don't
0169         txAckThreshold, // BOTH: 0=not allowed, 1=normal, 2-255 deliver ACK faster
0170         loopbackMode;   // BOTH: 0=no loopback, 1=loopback enabled
0171 
0172     /*
0173         4.  commands which are flags only; these are processed in order
0174             (so that, e.g., if both _txOn and _txOff flags are set, the
0175             port ends in a TX_OFF state); any non-zero value is respected
0176     */
0177     u8  _txOn,          // BOTH: enable transmitting (and continue if there's data)
0178         _txOff,         // BOTH: stop transmitting
0179         txFlush,        // BOTH: toss outbound data
0180         txBreak,        // BOTH: turn on break (cleared by _txOn)
0181         rxOn,           // BOTH: turn on receiver
0182         rxOff,          // BOTH: turn off receiver
0183         rxFlush,        // BOTH: toss inbound data
0184         rxForward,      // BOTH: forward all inbound data, NOW (as if fwdLen==1)
0185         returnStatus,   // BOTH: return current status (even if it hasn't changed)
0186         resetDataToggle;// BOTH: reset data toggle state to DATA0
0187     
0188 };
0189 
0190 // defines for bits in lcr
0191 #define USA_DATABITS_5      0x00
0192 #define USA_DATABITS_6      0x01
0193 #define USA_DATABITS_7      0x02
0194 #define USA_DATABITS_8      0x03
0195 #define STOPBITS_5678_1 0x00    // 1 stop bit for all byte sizes
0196 #define STOPBITS_5_1p5  0x04    // 1.5 stop bits for 5-bit byte
0197 #define STOPBITS_678_2  0x04    // 2 stop bits for 6/7/8-bit byte
0198 #define USA_PARITY_NONE     0x00
0199 #define USA_PARITY_ODD      0x08
0200 #define USA_PARITY_EVEN     0x18
0201 #define PARITY_1        0x28
0202 #define PARITY_0        0x38
0203 
0204 // all things called "StatusMessage" are sent on the status endpoint
0205 
0206 struct keyspan_usa26_portStatusMessage  // one for each port
0207 {
0208     u8  port,           // BOTH: 0=first, 1=second, other=see below
0209         hskia_cts,      // USA26: reports HSKIA pin
0210                         // USA17: reports CTS pin
0211         gpia_dcd,       // USA26: reports GPIA pin
0212                         // USA17: reports DCD pin
0213         dsr,            // USA17: reports DSR pin
0214         ri,             // USA17: reports RI pin
0215         _txOff,         // port has been disabled (by host)
0216         _txXoff,        // port is in XOFF state (either host or RX XOFF)
0217         rxEnabled,      // as configured by rxOn/rxOff 1=on, 0=off
0218         controlResponse;// 1=a control message has been processed
0219 };
0220 
0221 // bits in RX data message when STAT byte is included
0222 #define RXERROR_OVERRUN 0x02
0223 #define RXERROR_PARITY  0x04
0224 #define RXERROR_FRAMING 0x08
0225 #define RXERROR_BREAK   0x10
0226 
0227 struct keyspan_usa26_globalControlMessage
0228 {
0229     u8  sendGlobalStatus,   // 2=request for two status responses
0230         resetStatusToggle,  // 1=reset global status toggle
0231         resetStatusCount;   // a cycling value
0232 };
0233 
0234 struct keyspan_usa26_globalStatusMessage
0235 {
0236     u8  port,               // 3
0237         sendGlobalStatus,   // from request, decremented
0238         resetStatusCount;   // as in request
0239 };
0240 
0241 struct keyspan_usa26_globalDebugMessage
0242 {
0243     u8  port,               // 2
0244         a,
0245         b,
0246         c,
0247         d;
0248 };
0249 
0250 // ie: the maximum length of an EZUSB endpoint buffer
0251 #define MAX_DATA_LEN            64
0252 
0253 // update status approx. 60 times a second (16.6666 ms)
0254 #define STATUS_UPDATE_INTERVAL  16
0255 
0256 // status rationing tuning value (each port gets checked each n ms)
0257 #define STATUS_RATION   10
0258 
0259 #endif
0260 
0261