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.
