Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
| 2 | usa28msg.h |
| 3 | |
| 4 | Copyright (C) 1998-2000 InnoSys Incorporated. All Rights Reserved |
| 5 | This file is available under a BSD-style copyright |
| 6 | |
| 7 | Keyspan USB Async Message Formats for the USA26X |
| 8 | |
| 9 | Redistribution and use in source and binary forms, with or without |
| 10 | modification, are permitted provided that the following conditions are |
| 11 | met: |
| 12 | |
| 13 | 1. Redistributions of source code must retain this licence text |
| 14 | without modification, this list of conditions, and the following |
| 15 | disclaimer. The following copyright notice must appear immediately at |
| 16 | the beginning of all source files: |
| 17 | |
| 18 | Copyright (C) 1998-2000 InnoSys Incorporated. All Rights Reserved |
| 19 | |
| 20 | This file is available under a BSD-style copyright |
| 21 | |
| 22 | 2. The name of InnoSys Incorporated may not be used to endorse or promote |
| 23 | products derived from this software without specific prior written |
| 24 | permission. |
| 25 | |
| 26 | THIS SOFTWARE IS PROVIDED BY INNOSYS CORP. ``AS IS'' AND ANY EXPRESS OR |
| 27 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| 28 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN |
| 29 | NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
| 30 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| 31 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 32 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 33 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 34 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 35 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 36 | SUCH DAMAGE. |
| 37 | |
| 38 | Note: these message formats are common to USA18, USA19, and USA28; |
| 39 | (for USA28X, see usa26msg.h) |
| 40 | |
| 41 | Buffer formats for RX/TX data messages are not defined by |
| 42 | a structure, but are described here: |
| 43 | |
| 44 | USB OUT (host -> USA28, transmit) messages contain a |
| 45 | REQUEST_ACK indicator (set to 0xff to request an ACK at the |
| 46 | completion of transmit; 0x00 otherwise), followed by data. |
| 47 | If the port is configured for parity, the data will be an |
| 48 | alternating string of parity and data bytes, so the message |
| 49 | format will be: |
| 50 | |
| 51 | RQSTACK PAR DAT PAR DAT ... |
| 52 | |
| 53 | so the maximum length is 63 bytes (1 + 62, or 31 data bytes); |
| 54 | always an odd number for the total message length. |
| 55 | |
| 56 | If there is no parity, the format is simply: |
| 57 | |
| 58 | RQSTACK DAT DAT DAT ... |
| 59 | |
| 60 | with a total data length of 63. |
| 61 | |
| 62 | USB IN (USA28 -> host, receive) messages contain data and parity |
| 63 | if parity is configred, thusly: |
| 64 | |
| 65 | DAT PAR DAT PAR DAT PAR ... |
| 66 | |
| 67 | for a total of 32 data bytes; |
| 68 | |
| 69 | If parity is not configured, the format is: |
| 70 | |
| 71 | DAT DAT DAT ... |
| 72 | |
| 73 | for a total of 64 data bytes. |
| 74 | |
| 75 | In the TX messages (USB OUT), the 0x01 bit of the PARity byte is |
| 76 | the parity bit. In the RX messages (USB IN), the PARity byte is |
| 77 | the content of the 8051's status register; the parity bit |
| 78 | (RX_PARITY_BIT) is the 0x04 bit. |
| 79 | |
| 80 | revision history: |
| 81 | |
| 82 | 1999may06 add resetDataToggle to control message |
| 83 | 2000mar21 add rs232invalid to status response message |
| 84 | 2000apr04 add 230.4Kb definition to setBaudRate |
| 85 | 2000apr13 add/remove loopbackMode switch |
| 86 | 2000apr13 change definition of setBaudRate to cover 115.2Kb, too |
| 87 | 2000jun01 add extended BSD-style copyright text |
| 88 | */ |
| 89 | |
| 90 | #ifndef __USA28MSG__ |
| 91 | #define __USA28MSG__ |
| 92 | |
| 93 | |
| 94 | struct keyspan_usa28_portControlMessage |
| 95 | { |
| 96 | /* |
| 97 | there are four types of "commands" sent in the control message: |
| 98 | |
| 99 | 1. configuration changes which must be requested by setting |
| 100 | the corresponding "set" flag (and should only be requested |
| 101 | when necessary, to reduce overhead on the USA28): |
| 102 | */ |
| 103 | u8 setBaudRate, // 0=don't set, 1=baudLo/Hi, 2=115.2K, 3=230.4K |
| 104 | baudLo, // host does baud divisor calculation |
| 105 | baudHi; // baudHi is only used for first port (gives lower rates) |
| 106 | |
| 107 | /* |
| 108 | 2. configuration changes which are done every time (because it's |
| 109 | hardly more trouble to do them than to check whether to do them): |
| 110 | */ |
| 111 | u8 parity, // 1=use parity, 0=don't |
| 112 | ctsFlowControl, // all except 19Q: 1=use CTS flow control, 0=don't |
| 113 | // 19Q: 0x08:CTSflowControl 0x10:DSRflowControl |
| 114 | xonFlowControl, // 1=use XON/XOFF flow control, 0=don't |
| 115 | rts, // 1=on, 0=off |
| 116 | dtr; // 1=on, 0=off |
| 117 | |
| 118 | /* |
| 119 | 3. configuration data which is simply used as is (no overhead, |
| 120 | but must be correct in every host message). |
| 121 | */ |
| 122 | u8 forwardingLength, // forward when this number of chars available |
| 123 | forwardMs, // forward this many ms after last rx data |
| 124 | breakThreshold, // specified in ms, 1-255 (see note below) |
| 125 | xonChar, // specified in current character format |
| 126 | xoffChar; // specified in current character format |
| 127 | |
| 128 | /* |
| 129 | 4. commands which are flags only; these are processed in order |
| 130 | (so that, e.g., if both _txOn and _txOff flags are set, the |
| 131 | port ends in a TX_OFF state); any non-zero value is respected |
| 132 | */ |
| 133 | u8 _txOn, // enable transmitting (and continue if there's data) |
| 134 | _txOff, // stop transmitting |
| 135 | txFlush, // toss outbound data |
| 136 | txForceXoff, // pretend we've received XOFF |
| 137 | txBreak, // turn on break (leave on until txOn clears it) |
| 138 | rxOn, // turn on receiver |
| 139 | rxOff, // turn off receiver |
| 140 | rxFlush, // toss inbound data |
| 141 | rxForward, // forward all inbound data, NOW |
| 142 | returnStatus, // return current status n times (1 or 2) |
| 143 | resetDataToggle;// reset data toggle state to DATA0 |
| 144 | |
| 145 | }; |
| 146 | |
| 147 | struct keyspan_usa28_portStatusMessage |
| 148 | { |
| 149 | u8 port, // 0=first, 1=second, 2=global (see below) |
| 150 | cts, |
| 151 | dsr, // (not used in all products) |
| 152 | dcd, |
| 153 | |
| 154 | ri, // (not used in all products) |
| 155 | _txOff, // port has been disabled (by host) |
| 156 | _txXoff, // port is in XOFF state (either host or RX XOFF) |
| 157 | dataLost, // count of lost chars; wraps; not guaranteed exact |
| 158 | |
| 159 | rxEnabled, // as configured by rxOn/rxOff 1=on, 0=off |
| 160 | rxBreak, // 1=we're in break state |
| 161 | rs232invalid, // 1=no valid signals on rs-232 inputs |
| 162 | controlResponse;// 1=a control messages has been processed |
| 163 | }; |
| 164 | |
| 165 | // bit defines in txState |
| 166 | #define TX_OFF 0x01 // requested by host txOff command |
| 167 | #define TX_XOFF 0x02 // either real, or simulated by host |
| 168 | |
| 169 | struct keyspan_usa28_globalControlMessage |
| 170 | { |
| 171 | u8 sendGlobalStatus, // 2=request for two status responses |
| 172 | resetStatusToggle, // 1=reset global status toggle |
| 173 | resetStatusCount; // a cycling value |
| 174 | }; |
| 175 | |
| 176 | struct keyspan_usa28_globalStatusMessage |
| 177 | { |
| 178 | u8 port, // 3 |
| 179 | sendGlobalStatus, // from request, decremented |
| 180 | resetStatusCount; // as in request |
| 181 | }; |
| 182 | |
| 183 | struct keyspan_usa28_globalDebugMessage |
| 184 | { |
| 185 | u8 port, // 2 |
| 186 | n, // typically a count/status byte |
| 187 | b; // typically a data byte |
| 188 | }; |
| 189 | |
| 190 | // ie: the maximum length of an EZUSB endpoint buffer |
| 191 | #define MAX_DATA_LEN 64 |
| 192 | |
| 193 | // the parity bytes have only one significant bit |
| 194 | #define RX_PARITY_BIT 0x04 |
| 195 | #define TX_PARITY_BIT 0x01 |
| 196 | |
| 197 | // update status approx. 60 times a second (16.6666 ms) |
| 198 | #define STATUS_UPDATE_INTERVAL 16 |
| 199 | |
| 200 | #endif |
| 201 | |