Preliminary Design for CUPS Firewire Printer Backend - 03/19/2002 ----------------------------------------------------------------- OVERVIEW Easy Software Products will develop an IEEE-1394, a.k.a. Firewire, printing interface for its Common UNIX Printing System ("CUPS") for initial use under the Linux operating system. A follow-on implementation for MacOS X is anticipated as well. The operating system interfaces for IEEE-1394 ports vary widely; the CUPS printing interface will abstract the OS layer to a simpler interface geared towards discovering, opening, reading from, writing to, and closing IEEE-1394 printers. The initial development of the CUPS backend will be targeted at the EPSON Stylus Pro 10000 large format printer, which requires the bandwidth provided by Firewire in order to print at full speed. This printer supports printing via Serial Bus Protocol 2 (SBP-2) using the SCSI and PWG command sets. The CUPS backend will implement the PWG command set on LUN 0 only. OS ABSTRACTION LAYER The OS abstraction layer will be a thin client library that implements the following functions: ieee1394_list ieee1394_open ieee1394_close ieee1394_read ieee1394_write ieee1394_error The "ieee1394_list" function will list all of the available printer devices on the bus. The device information will consist of the device URI (ieee1394:/something) used to access the device and the make and model information, if available, for the device ("EPSON Stylus Printer"). The "ieee1394_open" and "ieee1394_close" functions will open and close a connection to the printer, respectively. The "ieee1394_read" and "ieee1394_write" functions will read and write data to and from the printer, respectively. The read function will be non-blocking, returning data only if there is data coming back from the printer. The "ieee1394_error" function will return a string describing the last error or NULL if no error occurred. The library will be responsible for creating any background threads that are needed to monitor the connection to the printer. CUPS BACKEND The CUPS backend will use the OS abstraction layer to list and access the Firewire printers. The "main" function will read and write printer data, while the "list_devices" function will be called as necessary to identify the available devices. The CUPS 1.1 backend will record any status information in the error log file, while the 1.2 backend will supply it to the printer driver process.