blob: c41728a857101062c009eae9286a44ade839b166 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*******************************************************************************
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