198 lines
6.5 KiB
C
198 lines
6.5 KiB
C
/*
|
|
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
|