The parameters that control the behavior of devices providing the termiox interface are specified by the termiox structure defined in the <sys/termiox.h> header. Several ioctl(2) system calls
that fetch or change these parameters use this structure:
|
#define NFF 5
struct termiox {
unsigned short x_hflag; /* hardware flow control modes */
unsigned short x_cflag; /* clock modes */
unsigned short x_rflag[NFF]; /* reserved modes */
unsigned short x_sflag; /* spare local modes */
};
|
The x_hflag field describes hardware flow control modes:
RTSXOFF | 0000001 | Enable RTS hardware flow control on input. |
CTSXON | 0000002 | Enable CTS hardware flow control on output. |
DTRXOFF | 0000004 | Enable DTR hardware flow control on input. |
CDXON | 0000010 | Enable CD hardware flow control on output. |
ISXOFF | 0000020 | Enable isochronous hardware flow control on input |
The EIA-232-D DTR and CD circuits are used to establish a connection between two systems. The RTS circuit is also used to establish a connection with a modem. Thus, both DTR and RTS are activated
when an asynchronous port is opened. If DTR is used for hardware flow control, then RTS must be used for connectivity. If CD is used for hardware flow control, then CTS must be used for connectivity. Thus,
RTS and DTR (or CTS and CD) cannot both be used for hardware flow control at the same time. Other mutual exclusions may apply, such as the simultaneous setting of the termio(7I) HUPCL and the termiox DTRXOFF
bits, which use the DTE ready line for different functions.
Variations of different hardware flow control methods may be selected by setting the the appropriate bits. For example, bidirectional RTS/CTS flow control is selected by setting both the RTSXOFF and CTSXON bits and bidirectional DTR/CTS flow control is selected by setting both the DTRXOFF and CTSXON. Modem control or unidirectional
CTS hardware flow control is selected by setting only the CTSXON bit.
As previously mentioned, it is assumed that the local asynchronous port (for example, computer) is configured as a DTE. If the connected device (for example, printer) is also a DTE, it is assumed
that the device is connected to the computer's asynchronous port using a null modem that swaps control circuits (typically RTS and CTS). The connected DTE drives RTS and the null modem swaps RTS and CTS
so that the remote RTS is received as CTS by the local DTE. In the case that CTSXON is set for hardware flow control, printer's lowering of its RTS would cause CTS seen by the computer
to be lowered. Output to the printer is suspended until the printer's raising of its RTS, which would cause CTS seen by the computer to be raised.
If RTSXOFF is set, the Request To Send (RTS) circuit (line) will be raised, and if the asynchronous port needs to have its input stopped, it will lower the Request To Send (RTS)
line. If the RTS line is lowered, it is assumed that the connected device will stop its output until RTS is raised.
If CTSXON is set, output will occur only if the Clear To Send (CTS) circuit (line) is raised by the connected device. If the CTS line is lowered by the connected device, output
is suspended until CTS is raised.
If DTRXOFF is set, the DTE Ready (DTR) circuit (line) will be raised, and if the asynchronous port needs to have its input stopped, it will lower the DTE Ready (DTR) line. If the
DTR line is lowered, it is assumed that the connected device will stop its output until DTR is raised.
If CDXON is set, output will occur only if the Received Line Signal Detector (CD) circuit (line) is raised by the connected device. If the CD line is lowered by the connected device,
output is suspended until CD is raised.
If ISXOFF is set, and if the isochronous port needs to have its input stopped, it will stop the outgoing clock signal. It is assumed that the connected device is using this clock
signal to create its output. Transit and receive clock sources are programmed using the x_cflag fields. If the port is not programmed for external clock generation, ISXOFF
is ignored. Output isochronous flow control is supported by appropriate clock source programming using the x_cflag field and enabled at the remote connected device.
The x_cflag field specifies the system treatment of clock modes.
XMTCLK | 0000007 | Transmit clock source: |
XCIBRG | 0000000 | Get transmit clock from internal baud rate generator. |
XCTSET | 0000001 | Get transmit clock from transmitter signal element timing (DCE source) lead, CCITT V.24 circuit 114, EIA-232-D pin 15. |
XCRSET | 0000002 | Get transmit clock from receiver signal element timing (DCE source) lead, CCITT V.24 circuit 115, EIA-232-D pin 17. |
RCVCLK | 0000070 | Receive clock source: |
RCIBRG | 0000000 | Get receive clock from internal baud rate generator. |
RCTSET | 0000010 | Get receive clock from transmitter signal element timing (DCE source) lead, CCITT V.24 circuit 114, EIA-232-D pin 15. |
RCRSET | 0000020 | Get receive clock from receiver signal element timing (DCE source) lead, CCITT V.24 circuit 115, EIA-232-D pin 17. |
TSETCLK | 0000700 | Transmitter signal element timing (DTE source) lead, CCITT V.24 circuit 113, EIA-232-D pin 24, clock source: |
TSETCOFF | 0000000 | TSET clock not provided. |
TSETCRBRG | 0000100 | Output receive baud rate generator on circuit 113. |
TSETCTBRG | 0000200 | Output transmit baud rate generator on circuit 113 |
TSETCTSET | 0000300 | Output transmitter signal element timing (DCE source) on circuit 113. |
TSETCRSET | 0000400 | Output receiver signal element timing (DCE source) on circuit 113. |
RSETCLK | 0007000 | Receiver signal element timing (DTE source) lead, CCITT V.24 circuit 128, no EIA-232-D pin, clock source: |
RSETCOFF | 0000000 | RSET clock not provided. |
RSETCRBRG | 0001000 | Output receive baud rate generator on circuit 128. |
RSETCTBRG | 0002000 | Output transmit baud rate generator on circuit 128. |
RSETCTSET | 0003000 | Output transmitter signal element timing (DCE source) on circuit 128. |
RSETCRSET | 0004000 | Output receiver signal element timing (DCE) on circuit 128. |
If the XMTCLK field has a value of XCIBRG the transmit clock is taken from the hardware internal baud rate generator, as in normal asynchronous transmission.
If XMTCLK = XCTSET the transmit clock is taken from the Transmitter Signal Element Timing (DCE source) circuit. If XMTCLK = XCRSET
the transmit clock is taken from the Receiver Signal Element Timing (DCE source) circuit.
If the RCVCLK field has a value of RCIBRG the receive clock is taken from the hardware Internal Baud Rate Generator, as in normal asynchronous transmission. If RCVCLK = RCTSET the receive clock is taken from the Transmitter Signal Element Timing (DCE source) circuit. If RCVCLK = RCRSET the receive
clock is taken from the Receiver Signal Element Timing (DCE source) circuit.
If the TSETCLK field has a value of TSETCOFF the Transmitter Signal Element Timing (DTE source) circuit is not driven. If TSETCLK = TSETCRBRG the Transmitter Signal Element Timing (DTE source) circuit is driven by the Receive Baud Rate Generator. If TSETCLK = TSETCTBRG the Transmitter
Signal Element Timing (DTE source) circuit is driven by the Transmit Baud Rate Generator. If TSETCLK = TSETCTSET the Transmitter Signal Element Timing (DTE source)
circuit is driven by the Transmitter Signal Element Timing (DCE source). If TSETCLK = TSETCRBRG the Transmitter Signal Element Timing (DTE source) circuit is driven
by the Receiver Signal Element Timing (DCE source).
If the RSETCLK field has a value of RSETCOFF the Receiver Signal Element Timing (DTE source) circuit is not driven. If RSETCLK = RSETCRBRG the Receiver Signal Element Timing (DTE source) circuit is driven by the Receive Baud Rate Generator. If RSETCLK = RSETCTBRG the Receiver Signal
Element Timing (DTE source) circuit is driven by the Transmit Baud Rate Generator. If RSETCLK = RSETCTSET the Receiver Signal Element Timing (DTE source) circuit is
driven by the Transmitter Signal Element Timing (DCE source). If RSETCLK = RSETCRBRG the Receiver Signal Element Timing (DTE source) circuit is driven by the Receiver
Signal Element Timing (DCE source).
The x_rflag is reserved for future interface definitions and should not be used by any implementations. The x_sflag may be used by local implementations wishing
to customize their terminal interface using the termiox ioctl system calls.
|