PageRenderTime 25ms CodeModel.GetById 9ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 1ms

/drivers/char/ip2/i2cmd.h

https://bitbucket.org/evzijst/gittest
C Header | 643 lines | 334 code | 101 blank | 208 comment | 0 complexity | 2fdfaaad4e342000e42ba2ad18c69b18 MD5 | raw file
  1/*******************************************************************************
  2*
  3*   (c) 1999 by Computone Corporation
  4*
  5********************************************************************************
  6*
  7*
  8*   PACKAGE:     Linux tty Device Driver for IntelliPort II family of multiport
  9*                serial I/O controllers.
 10*
 11*   DESCRIPTION: Definitions and support for In-line and Bypass commands.
 12*                Applicable only when the standard loadware is active.
 13*
 14*******************************************************************************/
 15//------------------------------------------------------------------------------
 16// Revision History:
 17//
 18// 10 October 1991   MAG First Draft
 19//  7 November 1991  MAG Reflects some new commands
 20// 20 February 1992  MAG CMD_HOTACK corrected: no argument.
 21// 24 February 1992  MAG Support added for new commands for 1.4.x loadware.
 22// 11 March 1992     MAG Additional commands.
 23// 16 March 1992     MAG Additional commands.
 24// 30 March 1992     MAG Additional command: CMD_DSS_NOW
 25// 18 May   1992     MAG Changed CMD_OPOST
 26//
 27//------------------------------------------------------------------------------
 28#ifndef I2CMD_H      // To prevent multiple includes
 29#define I2CMD_H   1
 30
 31#include "ip2types.h"
 32
 33// This module is designed to provide a uniform method of sending commands to
 34// the board through command packets. The difficulty is, some commands take
 35// parameters, others do not. Furthermore, it is often useful to send several
 36// commands to the same channel as part of the same packet. (See also i2pack.h.)
 37//
 38// This module is designed so that the caller should not be responsible for
 39// remembering the exact syntax of each command, or at least so that the
 40// compiler could check things somewhat. I'll explain as we go...
 41//
 42// First, a structure which can embody the syntax of each type of command.
 43//
 44typedef struct _cmdSyntax
 45{
 46	UCHAR length;   // Number of bytes in the command
 47	UCHAR flags;    // Information about the command (see below)
 48
 49	// The command and its parameters, which may be of arbitrary length. Don't
 50	// worry yet how the parameters will be initialized; macros later take care
 51	// of it. Also, don't worry about the arbitrary length issue; this structure
 52	// is never used to allocate space (see i2cmd.c).
 53	UCHAR cmd[2];
 54} cmdSyntax, *cmdSyntaxPtr;
 55
 56// Bit assignments for flags
 57
 58#define INL 1           // Set if suitable for inline commands
 59#define BYP 2           // Set if suitable for bypass commands
 60#define BTH (INL|BYP)   // suitable for either!
 61#define END 4           // Set if this must be the last command in a block
 62#define VIP 8           // Set if this command is special in some way and really
 63						// should only be sent from the library-level and not
 64						// directly from user-level
 65#define VAR 0x10        // This command is of variable length!
 66
 67//-----------------------------------
 68// External declarations for i2cmd.c
 69//-----------------------------------
 70// Routine to set up parameters for the "define hot-key sequence" command. Since
 71// there is more than one parameter to assign, we must use a function rather
 72// than a macro (used usually).
 73//
 74extern cmdSyntaxPtr i2cmdUnixFlags(USHORT iflag,USHORT cflag,USHORT lflag);
 75extern cmdSyntaxPtr i2cmdBaudDef(int which, USHORT rate);
 76
 77// Declarations for the global arrays used to bear the commands and their
 78// arguments.
 79//
 80// Note: Since these are globals and the arguments might change, it is important
 81// that the library routine COPY these into buffers from whence they would be
 82// sent, rather than merely storing the pointers. In multi-threaded
 83// environments, important that the copy should obtain before any context switch
 84// is allowed. Also, for parameterized commands, DO NOT ISSUE THE SAME COMMAND
 85// MORE THAN ONCE WITH THE SAME PARAMETERS in the same call.
 86//
 87static UCHAR ct02[];
 88static UCHAR ct03[];
 89static UCHAR ct04[];
 90static UCHAR ct05[];
 91static UCHAR ct06[];
 92static UCHAR ct07[];
 93static UCHAR ct08[];
 94static UCHAR ct09[];
 95static UCHAR ct10[];
 96static UCHAR ct11[];
 97static UCHAR ct12[];
 98static UCHAR ct13[];
 99static UCHAR ct14[];
100static UCHAR ct15[];
101static UCHAR ct16[];
102static UCHAR ct17[];
103static UCHAR ct18[];
104static UCHAR ct19[];
105static UCHAR ct20[];
106static UCHAR ct21[];
107static UCHAR ct22[];
108static UCHAR ct23[];
109static UCHAR ct24[];
110static UCHAR ct25[];
111static UCHAR ct26[];
112static UCHAR ct27[];
113static UCHAR ct28[];
114static UCHAR ct29[];
115static UCHAR ct30[];
116static UCHAR ct31[];
117static UCHAR ct32[];
118static UCHAR ct33[];
119static UCHAR ct34[];
120static UCHAR ct35[];
121static UCHAR ct36[];
122static UCHAR ct36a[];
123static UCHAR ct41[];
124static UCHAR ct42[];
125static UCHAR ct43[];
126static UCHAR ct44[];
127static UCHAR ct45[];
128static UCHAR ct46[];
129static UCHAR ct48[];
130static UCHAR ct49[];
131static UCHAR ct50[];
132static UCHAR ct51[];
133static UCHAR ct52[];
134static UCHAR ct56[];
135static UCHAR ct57[];
136static UCHAR ct58[];
137static UCHAR ct59[];
138static UCHAR ct60[];
139static UCHAR ct61[];
140static UCHAR ct62[];
141static UCHAR ct63[];
142static UCHAR ct64[];
143static UCHAR ct65[];
144static UCHAR ct66[];
145static UCHAR ct67[];
146static UCHAR ct68[];
147static UCHAR ct69[];
148static UCHAR ct70[];
149static UCHAR ct71[];
150static UCHAR ct72[];
151static UCHAR ct73[];
152static UCHAR ct74[];
153static UCHAR ct75[];
154static UCHAR ct76[];
155static UCHAR ct77[];
156static UCHAR ct78[];
157static UCHAR ct79[];
158static UCHAR ct80[];
159static UCHAR ct81[];
160static UCHAR ct82[];
161static UCHAR ct83[];
162static UCHAR ct84[];
163static UCHAR ct85[];
164static UCHAR ct86[];
165static UCHAR ct87[];
166static UCHAR ct88[];
167static UCHAR ct89[];
168static UCHAR ct90[];
169static UCHAR ct91[];
170static UCHAR cc01[];
171static UCHAR cc02[];
172
173// Now, refer to i2cmd.c, and see the character arrays defined there. They are
174// cast here to cmdSyntaxPtr.
175//
176// There are library functions for issuing bypass or inline commands. These
177// functions take one or more arguments of the type cmdSyntaxPtr. The routine
178// then can figure out how long each command is supposed to be and easily add it
179// to the list.
180//
181// For ease of use, we define manifests which return pointers to appropriate
182// cmdSyntaxPtr things. But some commands also take arguments. If a single
183// argument is used, we define a macro which performs the single assignment and
184// (through the expedient of a comma expression) references the appropriate
185// pointer. For commands requiring several arguments, we actually define a
186// function to perform the assignments.
187
188#define CMD_DTRUP	(cmdSyntaxPtr)(ct02)	// Raise DTR
189#define CMD_DTRDN	(cmdSyntaxPtr)(ct03)	// Lower DTR
190#define CMD_RTSUP	(cmdSyntaxPtr)(ct04)	// Raise RTS
191#define CMD_RTSDN	(cmdSyntaxPtr)(ct05)	// Lower RTS
192#define CMD_STARTFL	(cmdSyntaxPtr)(ct06)	// Start Flushing Data
193
194#define CMD_DTRRTS_UP (cmdSyntaxPtr)(cc01)	// Raise DTR and RTS
195#define CMD_DTRRTS_DN (cmdSyntaxPtr)(cc02)	// Lower DTR and RTS
196
197// Set Baud Rate for transmit and receive
198#define CMD_SETBAUD(arg) \
199	(((cmdSyntaxPtr)(ct07))->cmd[1] = (arg),(cmdSyntaxPtr)(ct07))
200
201#define CBR_50       1
202#define CBR_75       2
203#define CBR_110      3
204#define CBR_134      4
205#define CBR_150      5
206#define CBR_200      6
207#define CBR_300      7
208#define CBR_600      8
209#define CBR_1200     9
210#define CBR_1800     10
211#define CBR_2400     11
212#define CBR_4800     12
213#define CBR_9600     13
214#define CBR_19200    14
215#define CBR_38400    15
216#define CBR_2000     16
217#define CBR_3600     17
218#define CBR_7200     18
219#define CBR_56000    19
220#define CBR_57600    20
221#define CBR_64000    21
222#define CBR_76800    22
223#define CBR_115200   23
224#define CBR_C1       24    // Custom baud rate 1
225#define CBR_C2       25    // Custom baud rate 2
226#define CBR_153600   26
227#define CBR_230400   27
228#define CBR_307200   28
229#define CBR_460800   29
230#define CBR_921600   30
231
232// Set Character size
233//
234#define CMD_SETBITS(arg) \
235	(((cmdSyntaxPtr)(ct08))->cmd[1] = (arg),(cmdSyntaxPtr)(ct08))
236
237#define CSZ_5  0
238#define CSZ_6  1
239#define CSZ_7  2
240#define CSZ_8  3
241
242// Set number of stop bits
243//
244#define CMD_SETSTOP(arg) \
245	(((cmdSyntaxPtr)(ct09))->cmd[1] = (arg),(cmdSyntaxPtr)(ct09))
246
247#define CST_1  0
248#define CST_15 1  // 1.5 stop bits
249#define CST_2  2
250
251// Set parity option
252//
253#define CMD_SETPAR(arg) \
254	(((cmdSyntaxPtr)(ct10))->cmd[1] = (arg),(cmdSyntaxPtr)(ct10))
255
256#define CSP_NP 0  // no parity
257#define CSP_OD 1  // odd parity
258#define CSP_EV 2  // Even parity
259#define CSP_SP 3  // Space parity
260#define CSP_MK 4  // Mark parity
261
262// Define xon char for transmitter flow control
263//
264#define CMD_DEF_IXON(arg) \
265	(((cmdSyntaxPtr)(ct11))->cmd[1] = (arg),(cmdSyntaxPtr)(ct11))
266
267// Define xoff char for transmitter flow control
268//
269#define CMD_DEF_IXOFF(arg) \
270	(((cmdSyntaxPtr)(ct12))->cmd[1] = (arg),(cmdSyntaxPtr)(ct12))
271
272#define CMD_STOPFL   (cmdSyntaxPtr)(ct13) // Stop Flushing data
273
274// Acknowledge receipt of hotkey signal
275//
276#define CMD_HOTACK   (cmdSyntaxPtr)(ct14)
277
278// Define irq level to use. Should actually be sent by library-level code, not
279// directly from user...
280//
281#define CMDVALUE_IRQ 15 // For library use at initialization. Until this command
282						// is sent, board processing doesn't really start.
283#define CMD_SET_IRQ(arg) \
284	(((cmdSyntaxPtr)(ct15))->cmd[1] = (arg),(cmdSyntaxPtr)(ct15))
285
286#define CIR_POLL  0  // No IRQ - Poll
287#define CIR_3     3  // IRQ 3
288#define CIR_4     4  // IRQ 4
289#define CIR_5     5  // IRQ 5
290#define CIR_7     7  // IRQ 7
291#define CIR_10    10 // IRQ 10
292#define CIR_11    11 // IRQ 11
293#define CIR_12    12 // IRQ 12
294#define CIR_15    15 // IRQ 15
295
296// Select transmit flow xon/xoff options
297//
298#define CMD_IXON_OPT(arg) \
299	(((cmdSyntaxPtr)(ct16))->cmd[1] = (arg),(cmdSyntaxPtr)(ct16))
300
301#define CIX_NONE  0  // Incoming Xon/Xoff characters not special
302#define CIX_XON   1  // Xoff disable, Xon enable
303#define CIX_XANY  2  // Xoff disable, any key enable
304
305// Select receive flow xon/xoff options
306//
307#define CMD_OXON_OPT(arg) \
308	(((cmdSyntaxPtr)(ct17))->cmd[1] = (arg),(cmdSyntaxPtr)(ct17))
309
310#define COX_NONE  0  // Don't send Xon/Xoff
311#define COX_XON   1  // Send xon/xoff to start/stop incoming data
312
313
314#define CMD_CTS_REP  (cmdSyntaxPtr)(ct18) // Enable  CTS reporting
315#define CMD_CTS_NREP (cmdSyntaxPtr)(ct19) // Disable CTS reporting
316
317#define CMD_DCD_REP  (cmdSyntaxPtr)(ct20) // Enable  DCD reporting
318#define CMD_DCD_NREP (cmdSyntaxPtr)(ct21) // Disable DCD reporting
319
320#define CMD_DSR_REP  (cmdSyntaxPtr)(ct22) // Enable  DSR reporting
321#define CMD_DSR_NREP (cmdSyntaxPtr)(ct23) // Disable DSR reporting
322
323#define CMD_RI_REP   (cmdSyntaxPtr)(ct24) // Enable  RI  reporting
324#define CMD_RI_NREP  (cmdSyntaxPtr)(ct25) // Disable RI  reporting
325
326// Enable break reporting and select style
327//
328#define CMD_BRK_REP(arg) \
329	(((cmdSyntaxPtr)(ct26))->cmd[1] = (arg),(cmdSyntaxPtr)(ct26))
330
331#define CBK_STAT     0x00  // Report breaks as a status (exception,irq)
332#define CBK_NULL     0x01  // Report breaks as a good null
333#define CBK_STAT_SEQ 0x02  // Report breaks as a status AND as in-band character
334                           //  sequence FFh, 01h, 10h
335#define CBK_SEQ      0x03  // Report breaks as the in-band 
336						   //sequence FFh, 01h, 10h ONLY.
337#define CBK_FLSH     0x04  // if this bit set also flush input data
338#define CBK_POSIX    0x08  // if this bit set report as FF,0,0 sequence
339#define CBK_SINGLE   0x10  // if this bit set with CBK_SEQ or CBK_STAT_SEQ
340						   //then reports single null instead of triple
341
342#define CMD_BRK_NREP (cmdSyntaxPtr)(ct27) // Disable break reporting
343
344// Specify maximum block size for received data
345//
346#define CMD_MAX_BLOCK(arg) \
347	(((cmdSyntaxPtr)(ct28))->cmd[1] = (arg),(cmdSyntaxPtr)(ct28))
348
349// -- COMMAND 29 is reserved --
350
351#define CMD_CTSFL_ENAB  (cmdSyntaxPtr)(ct30) // Enable  CTS flow control
352#define CMD_CTSFL_DSAB  (cmdSyntaxPtr)(ct31) // Disable CTS flow control
353#define CMD_RTSFL_ENAB  (cmdSyntaxPtr)(ct32) // Enable  RTS flow control
354#define CMD_RTSFL_DSAB  (cmdSyntaxPtr)(ct33) // Disable RTS flow control
355
356// Specify istrip option
357//
358#define CMD_ISTRIP_OPT(arg) \
359	(((cmdSyntaxPtr)(ct34))->cmd[1] = (arg),(cmdSyntaxPtr)(ct34))
360
361#define CIS_NOSTRIP  0  // Strip characters to character size
362#define CIS_STRIP    1  // Strip any 8-bit characters to 7 bits
363
364// Send a break of arg milliseconds
365//
366#define CMD_SEND_BRK(arg) \
367	(((cmdSyntaxPtr)(ct35))->cmd[1] = (arg),(cmdSyntaxPtr)(ct35))
368
369// Set error reporting mode
370//
371#define CMD_SET_ERROR(arg) \
372	(((cmdSyntaxPtr)(ct36))->cmd[1] = (arg),(cmdSyntaxPtr)(ct36))
373
374#define CSE_ESTAT 0  // Report error in a status packet
375#define CSE_NOREP 1  // Treat character as though it were good
376#define CSE_DROP  2  // Discard the character
377#define CSE_NULL  3  // Replace with a null
378#define CSE_MARK  4  // Replace with a 3-character sequence (as Unix)
379
380#define  CMD_SET_REPLACEMENT(arg,ch)   \
381			(((cmdSyntaxPtr)(ct36a))->cmd[1] = (arg), \
382			(((cmdSyntaxPtr)(ct36a))->cmd[2] = (ch),  \
383			(cmdSyntaxPtr)(ct36a))
384
385#define CSE_REPLACE  0x8	// Replace the errored character with the
386							// replacement character defined here
387
388#define CSE_STAT_REPLACE   0x18	// Replace the errored character with the
389								// replacement character defined here AND
390								// report the error as a status packet (as in
391								// CSE_ESTAT).
392
393
394// COMMAND 37, to send flow control packets, is handled only by low-level
395// library code in response to data movement and shouldn't ever be sent by the
396// user code. See i2pack.h and the body of i2lib.c for details.
397
398// Enable on-board post-processing, using options given in oflag argument.
399// Formerly, this command was automatically preceded by a CMD_OPOST_OFF command
400// because the loadware does not permit sending back-to-back CMD_OPOST_ON
401// commands without an intervening CMD_OPOST_OFF. BUT, WE LEARN 18 MAY 92, that
402// CMD_OPOST_ON and CMD_OPOST_OFF must each be at the end of a packet (or in a
403// solo packet). This means the caller must specify separately CMD_OPOST_OFF,
404// CMD_OPOST_ON(parm) when he calls i2QueueCommands(). That function will ensure
405// each gets a separate packet. Extra CMD_OPOST_OFF's are always ok.
406//
407#define CMD_OPOST_ON(oflag)   \
408	(*(USHORT *)(((cmdSyntaxPtr)(ct39))->cmd[1]) = (oflag), \
409		(cmdSyntaxPtr)(ct39))
410
411#define CMD_OPOST_OFF   (cmdSyntaxPtr)(ct40) // Disable on-board post-proc
412
413#define CMD_RESUME   (cmdSyntaxPtr)(ct41)	// Resume: behave as though an XON
414											// were received;
415
416// Set Transmit baud rate (see command 7 for arguments)
417//
418#define CMD_SETBAUD_TX(arg) \
419	(((cmdSyntaxPtr)(ct42))->cmd[1] = (arg),(cmdSyntaxPtr)(ct42))
420
421// Set Receive baud rate (see command 7 for arguments)
422//
423#define CMD_SETBAUD_RX(arg) \
424	(((cmdSyntaxPtr)(ct43))->cmd[1] = (arg),(cmdSyntaxPtr)(ct43))
425
426// Request interrupt from board each arg milliseconds. Interrupt will specify
427// "received data", even though there may be no data present. If arg == 0,
428// disables any such interrupts.
429//
430#define CMD_PING_REQ(arg) \
431	(((cmdSyntaxPtr)(ct44))->cmd[1] = (arg),(cmdSyntaxPtr)(ct44))
432
433#define CMD_HOT_ENAB (cmdSyntaxPtr)(ct45) // Enable Hot-key checking
434#define CMD_HOT_DSAB (cmdSyntaxPtr)(ct46) // Disable Hot-key checking
435
436// COMMAND 47: Send Protocol info via Unix flags:
437// iflag = Unix tty t_iflag
438// cflag = Unix tty t_cflag
439// lflag = Unix tty t_lflag
440// See System V Unix/Xenix documentation for the meanings of the bit fields
441// within these flags
442//
443#define CMD_UNIX_FLAGS(iflag,cflag,lflag) i2cmdUnixFlags(iflag,cflag,lflag)
444
445#define CMD_DSRFL_ENAB  (cmdSyntaxPtr)(ct48) // Enable  DSR receiver ctrl
446#define CMD_DSRFL_DSAB  (cmdSyntaxPtr)(ct49) // Disable DSR receiver ctrl
447#define CMD_DTRFL_ENAB  (cmdSyntaxPtr)(ct50) // Enable  DTR flow control
448#define CMD_DTRFL_DSAB  (cmdSyntaxPtr)(ct51) // Disable DTR flow control
449#define CMD_BAUD_RESET  (cmdSyntaxPtr)(ct52) // Reset baudrate table
450
451// COMMAND 54: Define custom rate #1
452// rate = (short) 1/10 of the desired baud rate
453//
454#define CMD_BAUD_DEF1(rate) i2cmdBaudDef(1,rate)
455
456// COMMAND 55: Define custom rate #2
457// rate = (short) 1/10 of the desired baud rate
458//
459#define CMD_BAUD_DEF2(rate) i2cmdBaudDef(2,rate)
460
461// Pause arg hundredths of seconds. (Note, this is NOT milliseconds.)
462//
463#define CMD_PAUSE(arg) \
464	(((cmdSyntaxPtr)(ct56))->cmd[1] = (arg),(cmdSyntaxPtr)(ct56))
465
466#define CMD_SUSPEND     (cmdSyntaxPtr)(ct57) // Suspend output
467#define CMD_UNSUSPEND   (cmdSyntaxPtr)(ct58) // Un-Suspend output
468
469// Set parity-checking options
470//
471#define CMD_PARCHK(arg) \
472	(((cmdSyntaxPtr)(ct59))->cmd[1] = (arg),(cmdSyntaxPtr)(ct59))
473
474#define CPK_ENAB  0     // Enable parity checking on input
475#define CPK_DSAB  1     // Disable parity checking on input
476
477#define CMD_BMARK_REQ   (cmdSyntaxPtr)(ct60) // Bookmark request
478
479
480// Enable/Disable internal loopback mode
481//
482#define CMD_INLOOP(arg) \
483	(((cmdSyntaxPtr)(ct61))->cmd[1] = (arg),(cmdSyntaxPtr)(ct61))
484
485#define CIN_DISABLE  0  // Normal operation (default)
486#define CIN_ENABLE   1  // Internal (local) loopback
487#define CIN_REMOTE   2  // Remote loopback
488
489// Specify timeout for hotkeys: Delay will be (arg x 10) milliseconds, arg == 0
490// --> no timeout: wait forever.
491//
492#define CMD_HOT_TIME(arg) \
493	(((cmdSyntaxPtr)(ct62))->cmd[1] = (arg),(cmdSyntaxPtr)(ct62))
494
495
496// Define (outgoing) xon for receive flow control
497//
498#define CMD_DEF_OXON(arg) \
499	(((cmdSyntaxPtr)(ct63))->cmd[1] = (arg),(cmdSyntaxPtr)(ct63))
500
501// Define (outgoing) xoff for receiver flow control
502//
503#define CMD_DEF_OXOFF(arg) \
504	(((cmdSyntaxPtr)(ct64))->cmd[1] = (arg),(cmdSyntaxPtr)(ct64))
505
506// Enable/Disable RTS on transmit (1/2 duplex-style)
507//
508#define CMD_RTS_XMIT(arg) \
509	(((cmdSyntaxPtr)(ct65))->cmd[1] = (arg),(cmdSyntaxPtr)(ct65))
510
511#define CHD_DISABLE  0
512#define CHD_ENABLE   1
513
514// Set high-water-mark level (debugging use only)
515//
516#define CMD_SETHIGHWAT(arg) \
517	(((cmdSyntaxPtr)(ct66))->cmd[1] = (arg),(cmdSyntaxPtr)(ct66))
518
519// Start flushing tagged data (tag = 0-14)
520//
521#define CMD_START_SELFL(tag) \
522	(((cmdSyntaxPtr)(ct67))->cmd[1] = (tag),(cmdSyntaxPtr)(ct67))
523
524// End flushing tagged data (tag = 0-14)
525//
526#define CMD_END_SELFL(tag) \
527	(((cmdSyntaxPtr)(ct68))->cmd[1] = (tag),(cmdSyntaxPtr)(ct68))
528
529#define CMD_HWFLOW_OFF  (cmdSyntaxPtr)(ct69) // Disable HW TX flow control
530#define CMD_ODSRFL_ENAB (cmdSyntaxPtr)(ct70) // Enable DSR output f/c
531#define CMD_ODSRFL_DSAB (cmdSyntaxPtr)(ct71) // Disable DSR output f/c
532#define CMD_ODCDFL_ENAB (cmdSyntaxPtr)(ct72) // Enable DCD output f/c
533#define CMD_ODCDFL_DSAB (cmdSyntaxPtr)(ct73) // Disable DCD output f/c
534
535// Set transmit interrupt load level. Count should be an even value 2-12
536//
537#define CMD_LOADLEVEL(count) \
538	(((cmdSyntaxPtr)(ct74))->cmd[1] = (count),(cmdSyntaxPtr)(ct74))
539
540// If reporting DSS changes, map to character sequence FFh, 2, MSR
541//
542#define CMD_STATDATA(arg) \
543	(((cmdSyntaxPtr)(ct75))->cmd[1] = (arg),(cmdSyntaxPtr)(ct75))
544
545#define CSTD_DISABLE// Report DSS changes as status packets only (default)
546#define CSTD_ENABLE	// Report DSS changes as in-band data sequence as well as
547					// by status packet.
548
549#define CMD_BREAK_ON    (cmdSyntaxPtr)(ct76)// Set break and stop xmit
550#define CMD_BREAK_OFF   (cmdSyntaxPtr)(ct77)// End break and restart xmit
551#define CMD_GETFC       (cmdSyntaxPtr)(ct78)// Request for flow control packet
552											// from board.
553
554// Transmit this character immediately
555//
556#define CMD_XMIT_NOW(ch) \
557	(((cmdSyntaxPtr)(ct79))->cmd[1] = (ch),(cmdSyntaxPtr)(ct79))
558
559// Set baud rate via "divisor latch"
560//
561#define CMD_DIVISOR_LATCH(which,value) \
562			(((cmdSyntaxPtr)(ct80))->cmd[1] = (which), \
563			*(USHORT *)(((cmdSyntaxPtr)(ct80))->cmd[2]) = (value), \
564			(cmdSyntaxPtr)(ct80))
565
566#define CDL_RX 1	// Set receiver rate
567#define CDL_TX 2	// Set transmit rate
568					// (CDL_TX | CDL_RX) Set both rates
569
570// Request for special diagnostic status pkt from the board.
571//
572#define CMD_GET_STATUS (cmdSyntaxPtr)(ct81)
573
574// Request time-stamped transmit character count packet.
575//
576#define CMD_GET_TXCNT  (cmdSyntaxPtr)(ct82)
577
578// Request time-stamped receive character count packet.
579//
580#define CMD_GET_RXCNT  (cmdSyntaxPtr)(ct83)
581
582// Request for box/board I.D. packet.
583#define CMD_GET_BOXIDS (cmdSyntaxPtr)(ct84)
584
585// Enable or disable multiple channels according to bit-mapped ushorts box 1-4
586//
587#define CMD_ENAB_MULT(enable, box1, box2, box3, box4)    \
588			(((cmdSytaxPtr)(ct85))->cmd[1] = (enable),            \
589			*(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[2]) = (box1), \
590			*(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[4]) = (box2), \
591			*(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[6]) = (box3), \
592			*(USHORT *)(((cmdSyntaxPtr)(ct85))->cmd[8]) = (box4), \
593			(cmdSyntaxPtr)(ct85))
594
595#define CEM_DISABLE  0
596#define CEM_ENABLE   1
597
598// Enable or disable receiver or receiver interrupts (default both enabled)
599//
600#define CMD_RCV_ENABLE(ch) \
601	(((cmdSyntaxPtr)(ct86))->cmd[1] = (ch),(cmdSyntaxPtr)(ct86))
602
603#define CRE_OFF      0  // Disable the receiver
604#define CRE_ON       1  // Enable the receiver
605#define CRE_INTOFF   2  // Disable receiver interrupts (to loadware)
606#define CRE_INTON    3  // Enable receiver interrupts (to loadware)
607
608// Starts up a hardware test process, which runs transparently, and sends a
609// STAT_HWFAIL packet in case a hardware failure is detected.
610//
611#define CMD_HW_TEST  (cmdSyntaxPtr)(ct87)
612
613// Change receiver threshold and timeout value:
614// Defaults: timeout = 20mS
615// threshold count = 8 when DTRflow not in use,
616// threshold count = 5 when DTRflow in use.
617//
618#define CMD_RCV_THRESHOLD(count,ms) \
619			(((cmdSyntaxPtr)(ct88))->cmd[1] = (count), \
620			((cmdSyntaxPtr)(ct88))->cmd[2] = (ms), \
621			(cmdSyntaxPtr)(ct88))
622
623// Makes the loadware report DSS signals for this channel immediately.
624//
625#define CMD_DSS_NOW (cmdSyntaxPtr)(ct89)
626	
627// Set the receive silo parameters 
628// 	timeout is ms idle wait until delivery       (~VTIME)
629// 	threshold is max characters cause interrupt  (~VMIN)
630//
631#define CMD_SET_SILO(timeout,threshold) \
632			(((cmdSyntaxPtr)(ct90))->cmd[1] = (timeout), \
633			((cmdSyntaxPtr)(ct90))->cmd[2]  = (threshold), \
634			(cmdSyntaxPtr)(ct90))
635
636// Set timed break in decisecond (1/10s)
637//
638#define CMD_LBREAK(ds) \
639	(((cmdSyntaxPtr)(ct91))->cmd[1] = (ds),(cmdSyntaxPtr)(ct66))
640
641
642
643#endif // I2CMD_H