PRNIO(7I) | Ioctl Requests | PRNIO(7I) |
#include <sys/prnio.h>
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_SET_IFCAP
PRNIOC_GET_IFINFO
struct 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 that 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_PARALLEL - Centronics or IEEE 1284 compatible devices
PRN_SERIAL - EIA-232/EIA-485 serial ports
PRN_USB - Universal Serial Bus printers
PRN_1394 - IEEE 1394 peripherals
Printer interface info string is for information only: no implications should
be made from its value.
PRNIOC_RESET
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_DEVID
struct 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_STATUS
PRN_ONLINE - For devices that support PRN_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_READY - This bit indicates if the device is ready to receive/send
data. Applications may use this bit for an outbound flow control
PRNIOC_GET_1284_STATUS
PRNIOC_GET_TIMEOUTS
struct 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_TIMEOUTS
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Architecture | SPARC, IA |
Interface Stability | Evolving |
IEEE Std 1284-1994
January 2, 2002 |