forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
6.7 KiB
202 lines
6.7 KiB
/* SPDX-License-Identifier: BSD-3-Clause */ |
|
/* |
|
usa28msg.h |
|
|
|
Copyright (C) 1998-2000 InnoSys Incorporated. All Rights Reserved |
|
This file is available under a BSD-style copyright |
|
|
|
Keyspan USB Async Message Formats for the USA26X |
|
|
|
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-2000 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. |
|
|
|
Note: these message formats are common to USA18, USA19, and USA28; |
|
(for USA28X, see usa26msg.h) |
|
|
|
Buffer formats for RX/TX data messages are not defined by |
|
a structure, but are described here: |
|
|
|
USB OUT (host -> USA28, transmit) messages contain a |
|
REQUEST_ACK indicator (set to 0xff to request an ACK at the |
|
completion of transmit; 0x00 otherwise), followed by data. |
|
If the port is configured for parity, the data will be an |
|
alternating string of parity and data bytes, so the message |
|
format will be: |
|
|
|
RQSTACK PAR DAT PAR DAT ... |
|
|
|
so the maximum length is 63 bytes (1 + 62, or 31 data bytes); |
|
always an odd number for the total message length. |
|
|
|
If there is no parity, the format is simply: |
|
|
|
RQSTACK DAT DAT DAT ... |
|
|
|
with a total data length of 63. |
|
|
|
USB IN (USA28 -> host, receive) messages contain data and parity |
|
if parity is configred, thusly: |
|
|
|
DAT PAR DAT PAR DAT PAR ... |
|
|
|
for a total of 32 data bytes; |
|
|
|
If parity is not configured, the format is: |
|
|
|
DAT DAT DAT ... |
|
|
|
for a total of 64 data bytes. |
|
|
|
In the TX messages (USB OUT), the 0x01 bit of the PARity byte is |
|
the parity bit. In the RX messages (USB IN), the PARity byte is |
|
the content of the 8051's status register; the parity bit |
|
(RX_PARITY_BIT) is the 0x04 bit. |
|
|
|
revision history: |
|
|
|
1999may06 add resetDataToggle to control message |
|
2000mar21 add rs232invalid to status response message |
|
2000apr04 add 230.4Kb definition to setBaudRate |
|
2000apr13 add/remove loopbackMode switch |
|
2000apr13 change definition of setBaudRate to cover 115.2Kb, too |
|
2000jun01 add extended BSD-style copyright text |
|
*/ |
|
|
|
#ifndef __USA28MSG__ |
|
#define __USA28MSG__ |
|
|
|
|
|
struct keyspan_usa28_portControlMessage |
|
{ |
|
/* |
|
there are four 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 USA28): |
|
*/ |
|
u8 setBaudRate, // 0=don't set, 1=baudLo/Hi, 2=115.2K, 3=230.4K |
|
baudLo, // host does baud divisor calculation |
|
baudHi; // baudHi is only used for first port (gives lower rates) |
|
|
|
/* |
|
2. configuration changes which are done every time (because it's |
|
hardly more trouble to do them than to check whether to do them): |
|
*/ |
|
u8 parity, // 1=use parity, 0=don't |
|
ctsFlowControl, // all except 19Q: 1=use CTS flow control, 0=don't |
|
// 19Q: 0x08:CTSflowControl 0x10:DSRflowControl |
|
xonFlowControl, // 1=use XON/XOFF flow control, 0=don't |
|
rts, // 1=on, 0=off |
|
dtr; // 1=on, 0=off |
|
|
|
/* |
|
3. configuration data which is simply used as is (no overhead, |
|
but must be correct in every host message). |
|
*/ |
|
u8 forwardingLength, // forward when this number of chars available |
|
forwardMs, // forward this many ms after last rx data |
|
breakThreshold, // specified in ms, 1-255 (see note below) |
|
xonChar, // specified in current character format |
|
xoffChar; // specified in current character format |
|
|
|
/* |
|
4. commands which are flags only; these are processed in order |
|
(so that, e.g., if both _txOn and _txOff flags are set, the |
|
port ends in a TX_OFF state); any non-zero value is respected |
|
*/ |
|
u8 _txOn, // enable transmitting (and continue if there's data) |
|
_txOff, // stop transmitting |
|
txFlush, // toss outbound data |
|
txForceXoff, // pretend we've received XOFF |
|
txBreak, // turn on break (leave on until txOn clears it) |
|
rxOn, // turn on receiver |
|
rxOff, // turn off receiver |
|
rxFlush, // toss inbound data |
|
rxForward, // forward all inbound data, NOW |
|
returnStatus, // return current status n times (1 or 2) |
|
resetDataToggle;// reset data toggle state to DATA0 |
|
|
|
}; |
|
|
|
struct keyspan_usa28_portStatusMessage |
|
{ |
|
u8 port, // 0=first, 1=second, 2=global (see below) |
|
cts, |
|
dsr, // (not used in all products) |
|
dcd, |
|
|
|
ri, // (not used in all products) |
|
_txOff, // port has been disabled (by host) |
|
_txXoff, // port is in XOFF state (either host or RX XOFF) |
|
dataLost, // count of lost chars; wraps; not guaranteed exact |
|
|
|
rxEnabled, // as configured by rxOn/rxOff 1=on, 0=off |
|
rxBreak, // 1=we're in break state |
|
rs232invalid, // 1=no valid signals on rs-232 inputs |
|
controlResponse;// 1=a control messages has been processed |
|
}; |
|
|
|
// bit defines in txState |
|
#define TX_OFF 0x01 // requested by host txOff command |
|
#define TX_XOFF 0x02 // either real, or simulated by host |
|
|
|
struct keyspan_usa28_globalControlMessage |
|
{ |
|
u8 sendGlobalStatus, // 2=request for two status responses |
|
resetStatusToggle, // 1=reset global status toggle |
|
resetStatusCount; // a cycling value |
|
}; |
|
|
|
struct keyspan_usa28_globalStatusMessage |
|
{ |
|
u8 port, // 3 |
|
sendGlobalStatus, // from request, decremented |
|
resetStatusCount; // as in request |
|
}; |
|
|
|
struct keyspan_usa28_globalDebugMessage |
|
{ |
|
u8 port, // 2 |
|
n, // typically a count/status byte |
|
b; // typically a data byte |
|
}; |
|
|
|
// ie: the maximum length of an EZUSB endpoint buffer |
|
#define MAX_DATA_LEN 64 |
|
|
|
// the parity bytes have only one significant bit |
|
#define RX_PARITY_BIT 0x04 |
|
#define TX_PARITY_BIT 0x01 |
|
|
|
// update status approx. 60 times a second (16.6666 ms) |
|
#define STATUS_UPDATE_INTERVAL 16 |
|
|
|
#endif |
|
|
|
|