| /* |
| 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 Incorprated 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 |