Software flow control

The principal advantage of software flow control is the reduction in the number of electrical conductors between sender and receiver.

It also requires specific hardware implementation, which had more significant costs in earlier days of computing (i.e., 1960s and 70s).

Sending XOFF requires at least one character time to transmit, and may be queued behind already-transmitted data still in buffers.

To handle the latency caused by builtin FIFOs, more advanced UARTs, like the 16950, provide "on-chip" software flow control.

[1] Finally, since the XOFF/XON codes are sent in-band, they cannot appear in the data being transmitted without being mistaken for flow control commands.

Software flow control is used extensively by low-speed devices, especially older printers and dumb terminals, to indicate they are temporarily unable to accept more data.

Some terminal control packages, such as termcap, employ "padding" (short delays using millisecond granularity[2]) to allow such equipment sufficient time to perform the requested actions without the need to assert XOFF.

Robust XON is a technique to restart communication, just in case it was stopped by an accidentally received XOFF.

One common use is by serial printers (like HP LaserJet II) to indicate they are online and ready to receive data.