18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci usa26msg.h 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci Copyright (C) 1998-2000 InnoSys Incorporated. All Rights Reserved 68c2ecf20Sopenharmony_ci This file is available under a BSD-style copyright 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci Keyspan USB Async Message Formats for the USA28X 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci Redistribution and use in source and binary forms, with or without 118c2ecf20Sopenharmony_ci modification, are permitted provided that the following conditions are 128c2ecf20Sopenharmony_ci met: 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci 1. Redistributions of source code must retain this licence text 158c2ecf20Sopenharmony_ci without modification, this list of conditions, and the following 168c2ecf20Sopenharmony_ci disclaimer. The following copyright notice must appear immediately at 178c2ecf20Sopenharmony_ci the beginning of all source files: 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci Copyright (C) 1998-2000 InnoSys Incorporated. All Rights Reserved 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci This file is available under a BSD-style copyright 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci 2. The name of InnoSys Incorporated may not be used to endorse or promote 248c2ecf20Sopenharmony_ci products derived from this software without specific prior written 258c2ecf20Sopenharmony_ci permission. 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci THIS SOFTWARE IS PROVIDED BY INNOSYS CORP. ``AS IS'' AND ANY EXPRESS OR 288c2ecf20Sopenharmony_ci IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 298c2ecf20Sopenharmony_ci OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 308c2ecf20Sopenharmony_ci NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 318c2ecf20Sopenharmony_ci INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 328c2ecf20Sopenharmony_ci (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 338c2ecf20Sopenharmony_ci SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 348c2ecf20Sopenharmony_ci CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 358c2ecf20Sopenharmony_ci LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 368c2ecf20Sopenharmony_ci OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 378c2ecf20Sopenharmony_ci SUCH DAMAGE. 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci Third revision: USA28X version (aka USA26) 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci Buffer formats for RX/TX data messages are not defined by 428c2ecf20Sopenharmony_ci a structure, but are described here: 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci USB OUT (host -> USAxx, transmit) messages contain a 458c2ecf20Sopenharmony_ci REQUEST_ACK indicator (set to 0xff to request an ACK at the 468c2ecf20Sopenharmony_ci completion of transmit; 0x00 otherwise), followed by data: 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci RQSTACK DAT DAT DAT ... 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci with a total data length of 63. 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci USB IN (USAxx -> host, receive) messages begin with a status 538c2ecf20Sopenharmony_ci byte in which the 0x80 bit is either: 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci (a) 0x80 bit clear 568c2ecf20Sopenharmony_ci indicates that the bytes following it are all data 578c2ecf20Sopenharmony_ci bytes: 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci STAT DATA DATA DATA DATA DATA ... 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci for a total of up to 63 DATA bytes, 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci or: 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci (b) 0x80 bit set 668c2ecf20Sopenharmony_ci indicates that the bytes following alternate data and 678c2ecf20Sopenharmony_ci status bytes: 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci STAT DATA STAT DATA STAT DATA STAT DATA ... 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci for a total of up to 32 DATA bytes. 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci The valid bits in the STAT bytes are: 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci OVERRUN 0x02 768c2ecf20Sopenharmony_ci PARITY 0x04 778c2ecf20Sopenharmony_ci FRAMING 0x08 788c2ecf20Sopenharmony_ci BREAK 0x10 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci Notes: 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci (1) The OVERRUN bit can appear in either (a) or (b) format 838c2ecf20Sopenharmony_ci messages, but the but the PARITY/FRAMING/BREAK bits 848c2ecf20Sopenharmony_ci only appear in (b) format messages. 858c2ecf20Sopenharmony_ci (2) For the host to determine the exact point at which the 868c2ecf20Sopenharmony_ci overrun occurred (to identify the point in the data 878c2ecf20Sopenharmony_ci stream at which the data was lost), it needs to count 888c2ecf20Sopenharmony_ci 128 characters, starting at the first character of the 898c2ecf20Sopenharmony_ci message in which OVERRUN was reported; the lost character(s) 908c2ecf20Sopenharmony_ci would have been received between the 128th and 129th 918c2ecf20Sopenharmony_ci characters. 928c2ecf20Sopenharmony_ci (3) An RX data message in which the first byte has 0x80 clear 938c2ecf20Sopenharmony_ci serves as a "break off" indicator. 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci revision history: 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci 1999feb10 add reportHskiaChanges to allow us to ignore them 988c2ecf20Sopenharmony_ci 1999feb10 add txAckThreshold for fast+loose throughput enhancement 998c2ecf20Sopenharmony_ci 1999mar30 beef up support for RX error reporting 1008c2ecf20Sopenharmony_ci 1999apr14 add resetDataToggle to control message 1018c2ecf20Sopenharmony_ci 2000jan04 merge with usa17msg.h 1028c2ecf20Sopenharmony_ci 2000jun01 add extended BSD-style copyright text 1038c2ecf20Sopenharmony_ci 2001jul05 change message format to improve OVERRUN case 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci Note on shared names: 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci In the case of fields which have been merged between the USA17 1088c2ecf20Sopenharmony_ci and USA26 definitions, the USA26 definition is the first part 1098c2ecf20Sopenharmony_ci of the name and the USA17 definition is the second part of the 1108c2ecf20Sopenharmony_ci name; both meanings are described below. 1118c2ecf20Sopenharmony_ci*/ 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci#ifndef __USA26MSG__ 1148c2ecf20Sopenharmony_ci#define __USA26MSG__ 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_cistruct keyspan_usa26_portControlMessage 1188c2ecf20Sopenharmony_ci{ 1198c2ecf20Sopenharmony_ci /* 1208c2ecf20Sopenharmony_ci there are three types of "commands" sent in the control message: 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci 1. configuration changes which must be requested by setting 1238c2ecf20Sopenharmony_ci the corresponding "set" flag (and should only be requested 1248c2ecf20Sopenharmony_ci when necessary, to reduce overhead on the USA26): 1258c2ecf20Sopenharmony_ci */ 1268c2ecf20Sopenharmony_ci u8 setClocking, // BOTH: host requests baud rate be set 1278c2ecf20Sopenharmony_ci baudLo, // BOTH: host does baud divisor calculation 1288c2ecf20Sopenharmony_ci baudHi, // BOTH: baudHi is only used for first port (gives lower rates) 1298c2ecf20Sopenharmony_ci externalClock_txClocking, 1308c2ecf20Sopenharmony_ci // USA26: 0=internal, other=external 1318c2ecf20Sopenharmony_ci // USA17: 0=internal, other=external/RI 1328c2ecf20Sopenharmony_ci rxClocking, // USA17: 0=internal, 1=external/RI, other=external/DSR 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_ci setLcr, // BOTH: host requests lcr be set 1368c2ecf20Sopenharmony_ci lcr, // BOTH: use PARITY, STOPBITS, DATABITS below 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ci setFlowControl, // BOTH: host requests flow control be set 1398c2ecf20Sopenharmony_ci ctsFlowControl, // BOTH: 1=use CTS flow control, 0=don't 1408c2ecf20Sopenharmony_ci xonFlowControl, // BOTH: 1=use XON/XOFF flow control, 0=don't 1418c2ecf20Sopenharmony_ci xonChar, // BOTH: specified in current character format 1428c2ecf20Sopenharmony_ci xoffChar, // BOTH: specified in current character format 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_ci setTxTriState_setRts, 1458c2ecf20Sopenharmony_ci // USA26: host requests TX tri-state be set 1468c2ecf20Sopenharmony_ci // USA17: host requests RTS output be set 1478c2ecf20Sopenharmony_ci txTriState_rts, // BOTH: 1=active (normal), 0=tristate (off) 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci setHskoa_setDtr, 1508c2ecf20Sopenharmony_ci // USA26: host requests HSKOA output be set 1518c2ecf20Sopenharmony_ci // USA17: host requests DTR output be set 1528c2ecf20Sopenharmony_ci hskoa_dtr, // BOTH: 1=on, 0=off 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_ci setPrescaler, // USA26: host requests prescalar be set (default: 13) 1558c2ecf20Sopenharmony_ci prescaler; // BOTH: specified as N/8; values 8-ff are valid 1568c2ecf20Sopenharmony_ci // must be set any time internal baud rate is set; 1578c2ecf20Sopenharmony_ci // must not be set when external clocking is used 1588c2ecf20Sopenharmony_ci // note: in USA17, prescaler is applied whenever 1598c2ecf20Sopenharmony_ci // setClocking is requested 1608c2ecf20Sopenharmony_ci 1618c2ecf20Sopenharmony_ci /* 1628c2ecf20Sopenharmony_ci 3. configuration data which is simply used as is (no overhead, 1638c2ecf20Sopenharmony_ci but must be specified correctly in every host message). 1648c2ecf20Sopenharmony_ci */ 1658c2ecf20Sopenharmony_ci u8 forwardingLength, // BOTH: forward when this number of chars available 1668c2ecf20Sopenharmony_ci reportHskiaChanges_dsrFlowControl, 1678c2ecf20Sopenharmony_ci // USA26: 1=normal; 0=ignore external clock 1688c2ecf20Sopenharmony_ci // USA17: 1=use DSR flow control, 0=don't 1698c2ecf20Sopenharmony_ci txAckThreshold, // BOTH: 0=not allowed, 1=normal, 2-255 deliver ACK faster 1708c2ecf20Sopenharmony_ci loopbackMode; // BOTH: 0=no loopback, 1=loopback enabled 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_ci /* 1738c2ecf20Sopenharmony_ci 4. commands which are flags only; these are processed in order 1748c2ecf20Sopenharmony_ci (so that, e.g., if both _txOn and _txOff flags are set, the 1758c2ecf20Sopenharmony_ci port ends in a TX_OFF state); any non-zero value is respected 1768c2ecf20Sopenharmony_ci */ 1778c2ecf20Sopenharmony_ci u8 _txOn, // BOTH: enable transmitting (and continue if there's data) 1788c2ecf20Sopenharmony_ci _txOff, // BOTH: stop transmitting 1798c2ecf20Sopenharmony_ci txFlush, // BOTH: toss outbound data 1808c2ecf20Sopenharmony_ci txBreak, // BOTH: turn on break (cleared by _txOn) 1818c2ecf20Sopenharmony_ci rxOn, // BOTH: turn on receiver 1828c2ecf20Sopenharmony_ci rxOff, // BOTH: turn off receiver 1838c2ecf20Sopenharmony_ci rxFlush, // BOTH: toss inbound data 1848c2ecf20Sopenharmony_ci rxForward, // BOTH: forward all inbound data, NOW (as if fwdLen==1) 1858c2ecf20Sopenharmony_ci returnStatus, // BOTH: return current status (even if it hasn't changed) 1868c2ecf20Sopenharmony_ci resetDataToggle;// BOTH: reset data toggle state to DATA0 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci}; 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci// defines for bits in lcr 1918c2ecf20Sopenharmony_ci#define USA_DATABITS_5 0x00 1928c2ecf20Sopenharmony_ci#define USA_DATABITS_6 0x01 1938c2ecf20Sopenharmony_ci#define USA_DATABITS_7 0x02 1948c2ecf20Sopenharmony_ci#define USA_DATABITS_8 0x03 1958c2ecf20Sopenharmony_ci#define STOPBITS_5678_1 0x00 // 1 stop bit for all byte sizes 1968c2ecf20Sopenharmony_ci#define STOPBITS_5_1p5 0x04 // 1.5 stop bits for 5-bit byte 1978c2ecf20Sopenharmony_ci#define STOPBITS_678_2 0x04 // 2 stop bits for 6/7/8-bit byte 1988c2ecf20Sopenharmony_ci#define USA_PARITY_NONE 0x00 1998c2ecf20Sopenharmony_ci#define USA_PARITY_ODD 0x08 2008c2ecf20Sopenharmony_ci#define USA_PARITY_EVEN 0x18 2018c2ecf20Sopenharmony_ci#define PARITY_1 0x28 2028c2ecf20Sopenharmony_ci#define PARITY_0 0x38 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci// all things called "StatusMessage" are sent on the status endpoint 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_cistruct keyspan_usa26_portStatusMessage // one for each port 2078c2ecf20Sopenharmony_ci{ 2088c2ecf20Sopenharmony_ci u8 port, // BOTH: 0=first, 1=second, other=see below 2098c2ecf20Sopenharmony_ci hskia_cts, // USA26: reports HSKIA pin 2108c2ecf20Sopenharmony_ci // USA17: reports CTS pin 2118c2ecf20Sopenharmony_ci gpia_dcd, // USA26: reports GPIA pin 2128c2ecf20Sopenharmony_ci // USA17: reports DCD pin 2138c2ecf20Sopenharmony_ci dsr, // USA17: reports DSR pin 2148c2ecf20Sopenharmony_ci ri, // USA17: reports RI pin 2158c2ecf20Sopenharmony_ci _txOff, // port has been disabled (by host) 2168c2ecf20Sopenharmony_ci _txXoff, // port is in XOFF state (either host or RX XOFF) 2178c2ecf20Sopenharmony_ci rxEnabled, // as configured by rxOn/rxOff 1=on, 0=off 2188c2ecf20Sopenharmony_ci controlResponse;// 1=a control message has been processed 2198c2ecf20Sopenharmony_ci}; 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_ci// bits in RX data message when STAT byte is included 2228c2ecf20Sopenharmony_ci#define RXERROR_OVERRUN 0x02 2238c2ecf20Sopenharmony_ci#define RXERROR_PARITY 0x04 2248c2ecf20Sopenharmony_ci#define RXERROR_FRAMING 0x08 2258c2ecf20Sopenharmony_ci#define RXERROR_BREAK 0x10 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_cistruct keyspan_usa26_globalControlMessage 2288c2ecf20Sopenharmony_ci{ 2298c2ecf20Sopenharmony_ci u8 sendGlobalStatus, // 2=request for two status responses 2308c2ecf20Sopenharmony_ci resetStatusToggle, // 1=reset global status toggle 2318c2ecf20Sopenharmony_ci resetStatusCount; // a cycling value 2328c2ecf20Sopenharmony_ci}; 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_cistruct keyspan_usa26_globalStatusMessage 2358c2ecf20Sopenharmony_ci{ 2368c2ecf20Sopenharmony_ci u8 port, // 3 2378c2ecf20Sopenharmony_ci sendGlobalStatus, // from request, decremented 2388c2ecf20Sopenharmony_ci resetStatusCount; // as in request 2398c2ecf20Sopenharmony_ci}; 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_cistruct keyspan_usa26_globalDebugMessage 2428c2ecf20Sopenharmony_ci{ 2438c2ecf20Sopenharmony_ci u8 port, // 2 2448c2ecf20Sopenharmony_ci a, 2458c2ecf20Sopenharmony_ci b, 2468c2ecf20Sopenharmony_ci c, 2478c2ecf20Sopenharmony_ci d; 2488c2ecf20Sopenharmony_ci}; 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ci// ie: the maximum length of an EZUSB endpoint buffer 2518c2ecf20Sopenharmony_ci#define MAX_DATA_LEN 64 2528c2ecf20Sopenharmony_ci 2538c2ecf20Sopenharmony_ci// update status approx. 60 times a second (16.6666 ms) 2548c2ecf20Sopenharmony_ci#define STATUS_UPDATE_INTERVAL 16 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_ci// status rationing tuning value (each port gets checked each n ms) 2578c2ecf20Sopenharmony_ci#define STATUS_RATION 10 2588c2ecf20Sopenharmony_ci 2598c2ecf20Sopenharmony_ci#endif 2608c2ecf20Sopenharmony_ci 2618c2ecf20Sopenharmony_ci 262