| PRNIO(4I) | Ioctl Requests | PRNIO(4I) |
prnio — generic
printer interface
#include
<sys/prnio.h>
The prnio generic printer interface
defines ioctl commands and data structures for printer device drivers.
prnio defines and provides facilities for
five basic phases of the printing process:
During the Identification phase, the application retrieves a set
of device capabilities and additional information using the
PRNIOC_GET_IFCAP,
PRNIOC_GET_STATUS,
PRNIOC_GET_TIMEOUTS,
PRNIOC_GET_IFINFO, and
PRNIOC_GET_1284_DEVID commands.
During the Setup phase the application sets some interface
attributes and probably resets the printer as described in the
PRNIOC_SET_IFCAP,
PRNIOC_SET_TIMEOUTS, and
PRNIOC_RESET sections.
During the Transfer phase, data is transferred in a forward (host
to peripheral) or reverse direction (peripheral to host). Transfer is
accomplished using write(2) and
read(2) system calls. For
prnio compliant printer drivers, forward transfer
support is mandatory, while reverse transfer support is optional.
Applications can also use PRNIOC_GET_STATUS and
PRNIOC_GET_1284_STATUS commands during the transfer
to monitor the device state.
The Cleanup phase is accomplished by closing the device using
close(2). Device drivers supporting
prnio may set non-zero error code as appropriate.
Applications should explicitly close(2)
a device before exiting and check errno value.
The Abort phase is accomplished by interrupting the
write(2) and
read(2) system calls. The application
can perform some additional cleanup during the Abort phase as described in
PRNIOC_GET_IFCAP section.
PRNIOC_GET_IFCAPPRN_BIDIPRN_HOTPLUGPRN_1284_DEVIDPRNIOC_GET_1284_DEVID).PRN_1284_STATUSPRNIOC_GET_1284_STATUS). Some devices
support this ioctl in unidirectional mode only.PRN_TIMEOUTSPRN_TIMEOUTS is set, the driver supports this
functionality and the timeout values can be retrieved and modified via
the PRNIOC_GET_TIMEOUTS and
PRNIOC_SET_TIMEOUTS ioctls. Otherwise,
applications can implement their own timeouts and abort phase.PRN_STREAMSPRN_STREAMS capability, the
application must issue an I_FLUSH
ioctl(2) before
close(2) to dismiss the
untransferred data. Only STREAMS drivers can support this
capability.PRNIOC_SET_IFCAPPRNIOC_GET_IFCAP section.
Capabilities should be set one at a time; otherwise the command will
return EINVAL. The following capabilities can be
changed by this ioctl:
PRN_BIDIPRNIOC_GET_IFCAP to check if the mode was
successfully changed. Because some capabilities may be altered as a
side effect of changing other capabilities, this command should be
followed by PRNIOC_GET_IFCAP.PRNIOC_GET_IFINFOstruct prn_interface_info {
uint_t if_len; /* length of buffer */
uint_t if_rlen; /* actual info length */
char *if_data; /* buffer address */
};
The application allocates a buffer and sets if_data and if_len values to its address and length, respectively. The driver returns the string to this buffer and sets if_len to its length. If if_len is less than if_rlen, the driver must return the first if_len bytes of the string. The application may then repeat the command with a bigger buffer.
Although prnio does not limit the
contents of the interface info string, some values are recommended and
defined in <sys/prnio.h>
by the following macros:
PRN_PARALLELPRN_SERIALPRN_USBPRN_1394Printer interface info string is for information only: no implications should be made from its value.
PRNIOC_RESETPRNIOC_RESET command. Reset
semantics are device-specific, and in general, applications using this
command should be aware of the printer type.
Each prnio compliant driver is
required to accept this request, although performed actions are
completely driver-dependent. More information on the
PRNIOC_RESET implementation for the particular
driver is available in the corresponding man page and printer
manual.
PRNIOC_GET_1284_DEVIDstruct prn_1284_device_id {
uint_t id_len; /* length of buffer */
uint_t id_rlen; /* actual ID length */
char *id_data; /* buffer address */
};
For convenience, the two-byte length field is not considered part of device ID string and is not returned in the user buffer. Instead, id_rlen value shall be set to (length - 2) by the driver, where length is the ID length field value. If buffer length is less than id_rlen, the driver returns the first id_len bytes of the ID.
The printer driver must return the most up-to-date value of the device ID.
PRNIOC_GET_STATUSPRN_ONLINEPRN_HOTPLUG
capability, this bit is set when the device is online, otherwise the
device is offline. Devices without PRN_HOTPLUG
support should always have this bit set.PRN_READYPRNIOC_GET_1284_STATUSPRN_1284_STATUS capability
accept this ioctl to retrieve the device status lines defined in
IEEE 1284 for use in Compatibility mode. The following
bits may be set by the driver:
PRN_1284_NOFAULTPRN_1284_SELECTPRN_1284_PEPRN_1284_BUSYPRNIOC_GET_TIMEOUTSstruct prn_timeouts {
uint_t tmo_forward; /* forward transfer timeout */
uint_t tmo_reverse; /* reverse transfer timeout */
};
tmo_forward and
tmo_reverse define forward and reverse transfer
timeouts in seconds. This command is only valid for drivers that support
PRN_TIMEOUTS capability.
PRNIOC_SET_TIMEOUTSPRN_TIMEOUTS capability.close(2), ioctl(2), read(2), write(2), ecpp(4D), lp(4D), usbprn(4D), attributes(7)
IEEE Std 1284-1994.
| August 31, 2018 | OmniOS |