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