2005-04-17 02:20:36 +04:00
/*
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
2005-05-04 05:07:24 +04:00
2. The name of InnoSys Incorporated may not be used to endorse or promote
2005-04-17 02:20:36 +04:00
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 :
2003f eb14 add setTxMode / txMode and cancelRxXoff to portControl
2003 mar21 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