summaryrefslogtreecommitdiff
path: root/doc/gimpprint.info-4
diff options
context:
space:
mode:
Diffstat (limited to 'doc/gimpprint.info-4')
-rw-r--r--doc/gimpprint.info-41151
1 files changed, 0 insertions, 1151 deletions
diff --git a/doc/gimpprint.info-4 b/doc/gimpprint.info-4
deleted file mode 100644
index a42b029..0000000
--- a/doc/gimpprint.info-4
+++ /dev/null
@@ -1,1151 +0,0 @@
-This is gimpprint.info, produced by makeinfo version 4.0 from
-gimpprint.texi.
-
-INFO-DIR-SECTION Libraries
-START-INFO-DIR-ENTRY
-* GIMP-Print: (gimpprint). print plugin for the GIMP, and printing library
-END-INFO-DIR-ENTRY
-
- This file documents the gimpprint library and associated programs
-used for high quality printing.
-
- Copyright (C) 2001 Michael Sweet (<mike@easysw.com>) and Robert
-Krawitz (<rlk@alum.mit.edu>)
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Foundation.
-
-
-File: gimpprint.info, Node: Oversampling, Prev: What is perfect weaving?, Up: Weaving algorithms
-
-Oversampling
-------------
-
- By oversampling, we mean printing on the same row more than once.
-There are two reasons for oversampling: to increase the horizontal
-resolution of the printout and to reduce banding.
-
- Oversampling to increase horizontal resolution is necessary because,
-although the printer might be able to position an ink drop to, for
-example, 1/1440" horizontally, it may not be able to lay down two such
-drops 1/1440" apart. If it can print two drops 1/720" apart, 2x
-oversampling will be necessary to get a 1/1440" horizontal resolution.
-If it can only print two drops 1/360" apart, 4x oversampling will be
-necessary for a 1/1440" horizontal resolution. The printer enforces
-this "drop spacing" by only accepting raster passes with a horizontal
-resolution matching the spacing with which it can print dots, so we
-must print passes at different horizontal positions if we are to obtain
-a higher horizontal resolution. (Another reason it does this may be to
-reduce the amount of memory needed in the printer.)
-
- Oversampling can also be done to decrease the banding apparent in an
-image. By splitting a row into two or more sets of dots ("lines") and
-printing each line on the same row, but with a different nozzle for
-each line, we can get a smoother print.
-
- To quantify these two kinds of oversampling, we'll introduce two new
-constants: H shows how many different horizontal offsets we want to
-print at (the "horizontal oversampling") while O shows how many times
-we want to print each row, over and above the number of times necessary
-for horizontal oversampling (the "extra oversampling").
-
- It is necessary for all the lines printed by a given pass to have the
-same horizontal offset, but there need not be any relation between them
-in terms of extra oversampling. For the moment, however, we will treat
-all oversampling as potentially requiring this alignment; all lines in
-one pass must be derived from the original row data in the same way.
-Thus, we'll assume O=1 for now.
-
- So, how do we do this oversampling? In fact, it can be done easily:
-advance the paper by a factor of H less between each pass. We'll
-define a new variable, A, to show how much we advance the paper between
-passes. Previously, we'd have defined A=J; we now let A=J/H. This
-also affects our pass blocks. Printing one pass block used to involve
-advancing the paper S*J rows; it now advances the paper S*J/H rows. We
-therefore name a group of H pass blocks a "band". Printing one band
-involves advancing the paper S*J rows, as a pass block did before.
-
- To keep our weave pattern working correctly, so that overprinting
-does not occur within a pass block, we also have to redefine G as
-GCD(S,A). Here's an example of an oversampled weave pattern:
-
-S=4, J=10, H=2, A=J/H=10/2=5, G=GCD(4,5)=1,
-passesperblock=S=4,
-passespersubblock=S/G=4/1=4:
-
- 0 *---*---*---*---*---*---*---*---*---*
- 1 *---*---*---*---*---*---*---*---*---*
- 2 *---*---*---*---*---*---*---*---*---*
- 3 *---*---*---*---*---*---*---*---*---*
- 4 *---*---*---*---*---*---*---*---*---*
- 5 *---*---*---*---*---*---*---*---*---*
- 6 *---*---*---*---*---*---*---*---*---*
- 7 *---*---*---*---*---*---*---*---*---*
- 8 *---*---*---*---*---*---*---*---*---*
- 9 *---*---*---*---*---*---*---*---*
- 10 *---*---*---*---*---*---*---
- 11 *---*---*---*---*---*--
- 12 *---*---*---*---*-
- 13 *---*---*---*
- 14 *---*---
- 15 *--
-
- Now we have to determine which line is printed by each jet on each
-pass. If we number each line generated as we split up a row, we can
-use these numbers. We'll number the lines in our diagram by replacing
-the `*'s with integers in the range [0...H-1].
-
- Overprinting occurs once per pass block, so we can simply print pass
-block 0 with line 0, pass block 1 with line 1, pass block 2 with line
-2, etc, wrapping to 0 when we've run out of lines:
-
- 0 0---0---0---0---0---0---0---0---0---0
- 1 0---0---0---0---0---0---0---0---0---0
- 2 0---0---0---0---0---0---0---0---0---0
- 3 0---0---0---0---0---0---0---0---0---0
- 4 1---1---1---1---1---1---1---1---1---1
- 5 1---1---1---1---1---1---1---1---1---1
- 6 1---1---1---1---1---1---1---1---1---1
- 7 1---1---1---1---1---1---1---1---1---1
- 8 0---0---0---0---0---0---0---0---0---0
- 9 0---0---0---0---0---0---0---0---0
- 10 0---0---0---0---0---0---0---
- 11 0---0---0---0---0---0--
- 12 1---1---1---1---1-
- 13 1---1---1---1
- 14 1---1---
- 15 1--
-
-S=4, J=12, H=2, A=J/H=12/2=6, G=GCD(4,6)=2,
-passesperblock=S=4,
-passespersubblock=S/G=4/2=2:
-
- 0 0---0---0---0---0---0---0---0---0---0---0---0
- 1 0---0---0---0---0---0---0---0---0---0---0---0
- 2 0---0---0---0---0---0---0---0---0---0---0---0
- 3 0---0---0---0---0---0---0---0---0---0---0---0
- 4 1---1---1---1---1---1---1---1---1---1---1---1
- 5 1---1---1---1---1---1---1---1---1---1---1---1
- 6 1---1---1---1---1---1---1---1---1---1---1
- 7 1---1---1---1---1---1---1---1---1--
- 8 0---0---0---0---0---0---0---0-
- 9 0---0---0---0---0---0---
- 10 0---0---0---0---0
- 11 0---0---0--
- 12 1---1-
-
- But what do we do if J is not an exact multiple of H? This is a
-difficult problem, which I struggled with for quite a few days before
-giving in and taking the easy (but less elegant) way out. The easy
-solution is to round J/H down, then add on the accumulated error at the
-end of each band.
-
-S=4, J=11, H=2 A=floor(J/H)=floor(11/2)=5, G=GCD(4,5),
-passesperblock=S=4,
-passespersubblock=S/G=4/1=4
-
- Band 0:
- 0 0---0---0---0---0---0---0---0---0---0---0
- 1 0---0---0---0---0---0---0---0---0---0---0
- 2 0---0---0---0---0---0---0---0---0---0---0
- 3 0---0---0---0---0---0---0---0---0---0---0
- 4 1---1---1---1---1---1---1---1---1---1---1
- 5 1---1---1---1---1---1---1---1---1---1---1
- 6 1---1---1---1---1---1---1---1---1---1---1
- 7 1---1---1---1---1---1---1---1---1---1---
-
- Band 1:
- 8 | 0---0---0---0---0---0---0---0---0-
- 9 \-----------------------------------------/ 0---0---0---0---0---0---0---0
- 10 S*J rows 0---0---0---0---0---0---
- 11 0---0---0---0---0--
- 12 1---1---1---1-
- 13 1---1---1
- 14 1---
-
- We can calculate the starting row and subpass number of a given pass
-in this scheme as follows:
-
- A = floor(J / H)
- subblocksperblock = gcd(S, A)
- subpassblock = floor((p % S) * subblocksperblock / S)
- if subpassblock * 2 < subblocksperblock
- subblockoffset = 2*subpassblock
- else
- subblockoffset = 2*(subblocksperblock-subpassblock)-1
- band = floor(P / (S * H))
- passinband = P % (S * H)
- startingrow = band * S * J + passinband * A + subblockoffset
- subpass = passinband / S
-
- So the row number of jet j of pass p is
-
- A = floor(J / H)
- subblocksperblock = gcd(S, A)
-
- subblockoffset(p)
- = 2*subpassblock , if subpassblock * 2 < subblocksperblock
- = 2*(subblocksperblock-subpassblock)-1 , otherwise
- where
- subpassblock = floor((p % S) * subblocksperblock / S)
-
- band(p) = floor(p / (S * H))
- passinband(p) = p % (S * H)
-
- row(j, p) = band(p) * S * J + passinband(p) * A + subblockoffset(p) + j * S
- row(j, p) = p * J + subblockoffset(p) + j * S
-
- To be continued....
-
-
-File: gimpprint.info, Node: ESC/P2, Next: New Printer, Prev: Weaving, Up: Appendices
-
-ESC/P2
-******
-
-* Menu:
-
-* ESC/P2 Introduction:: What is ESC/P2
-* ESC/P2 Standard Commands:: Normal ESC/P2 commands
-* ESC/P2 Remote Mode Commands:: Exotic ESC/P2 commands
-* ESC/P2 Appropriate Remote Commands:: Useful remote command sequences
-
-
-File: gimpprint.info, Node: ESC/P2 Introduction, Next: ESC/P2 Standard Commands, Up: ESC/P2
-
-Introduction to ESC/P2
-======================
-
- This is a description of the ESC/P2 raster commands used by the
-gimp-print plugin and Ghostscript driver, which is a subset of the
-complete command set. The full documents are found on
-<http://www.ercipd.com/isv/edr_docs.htm>. Note that these are *not*
-always correct, and are certainly not complete.
-
- All ESCP/2 raster commands begin with the `ESC' character (1b hex),
-followed by either one or two command characters and arguments where
-applicable. Older commands generally have one command character. Newer
-commands usually have a `(' (left parenthesis) followed by a command
-character and a byte count for the arguments that follow. The byte
-count is a 16-bit (2 byte) binary integer, in little endian order.
-
- All arguments listed here are of the form `name[bytes]' where
-`[bytes]' is the number of bytes that comprise the argument. The
-arguments themselves are usually one, two, or four byte integers, always
-little endian (the least significant bits come first). Presumably this
-is to match Intel processors.
-
- In some cases, the same command sequence identifies different
-versions of the same command, depending upon the number of bytes of
-arguments.
-
-
-File: gimpprint.info, Node: ESC/P2 Standard Commands, Next: ESC/P2 Remote Mode Commands, Prev: ESC/P2 Introduction, Up: ESC/P2
-
-Standard commands
-=================
-
- - ESC/P2 command: `ESC @'
- Reset the printer. Discards any output, ejects the existing page,
- returns all settings to their default. Always use this before
- printing a page.
-
- - ESC/P2 command: `ESC (G BC=1 ON1'
- Turn on graphics mode. ON should be `1' (turn on graphics mode).
-
- - ESC/P2 command: `ESC (U BC=1 UNIT1'
- Set basic unit of measurement used by printer. This is expressed
- in multiples of 1/3600". At 720 DPI, UNIT is `5'; at 360 DPI,
- UNIT is `10'.
-
- - ESC/P2 command: `ESC (U BC=5 PAGEUNITS1 VUNIT1 HUNIT1 BASEUNIT2'
- Set basic units of measurement used by the printer. PAGEUNIT is
- the unit of page measurement (for commands that set page
- dimensions and the like). VUNIT is the unit of vertical
- measurement (for vertical movement commands). HUNIT is the unit
- of horizontal movement (for horizontal positioning commands). All
- of these units are expressed in BASEUNIT, which is in reciprocal
- inches. Typically, BASEUNIT is `1440'. In 720 DPI mode, PAGEUNIT,
- VUNIT, and HUNIT are all `2'; in 1440x720 DPI mode, PAGEUNIT and
- VUNIT are normally set to `2'; HUNIT is set to `1'.
-
- - ESC/P2 command: `ESC (K BC=2 ZERO1 GRAYMODE1'
- Set color or grayscale mode, on printers supporting an explicit
- grayscale mode. These printers can be identified because they are
- advertised as having more black nozzles than nozzles of individual
- colors. Setting grayscale mode allows use of these extra nozzles
- for faster printing. GRAYMODE should be `0' or `2' for color, `1'
- for grayscale. ZERO should always be `0'.
-
- - ESC/P2 command: `ESC (i BC=1 MICROWEAVE1'
- If MICROWEAVE is `1', use microweave mode. On older printers,
- this is used to turn on microweave; on newer printers, it prints
- one row at a time. All printers support this mode. It should
- only be used at 720 (or 1440x720) DPI. The Epson Stylus Pro series
- indicates additional modes:
-
- `2'
- "Full-overlap"
-
- `3'
- "Four-pass"
-
- `4'
- "Full-overlap 2"
-
- Any of these commands can be used with the high four bits set to
- either `3' or `0'.
-
- - ESC/P2 command: `ESC U DIRECTION1'
- If DIRECTION is `1', print unidirectionally; if `0', print
- bidirectionally.
-
- - ESC/P2 command: `ESC (s BC=1 SPEED1'
- On some older printers, this controls the print head speed. SPEED
- of `2' is 10 inches/sec; SPEED of `0' or 1 is 20.
-
- - ESC/P2 command: `ESC (e BC=2 ZERO1 DOTSIZE1'
- Choose print dotsize. DOTSIZE can take on various values,
- depending upon the printer. Almost all printers support `0' and
- `2'. Variable dot size printers allow a value of 16. Other than
- the value of 16, this appears to be ignored at resolutions of 720
- DPI and above.
-
- - ESC/P2 command: `ESC (C BC=2 PAGELENGTH2'
- - ESC/P2 command: `ESC (C BC=4 PAGELENGTH4'
- Set the length of the page in "pageunits" (see `ESC (U' above).
- The second form of the command allows setting of longer page
- lengths on new printers (these happen to be the printers that
- support variable dot size).
-
- - ESC/P2 command: `ESC (c BC=4 TOP2 LENGTH2'
- - ESC/P2 command: `ESC (c BC=8 TOP4 LENGTH4'
- Set the vertical page margins of the page in "pageunits" (see `ESC
- (U' above). The margins are specified as the top of the page and
- the length of the page. The second form of the command allows
- setting of longer page lengths on new printers (these happen to be
- the printers that support variable dot size).
-
- - ESC/P2 command: `ESC (S BC=8 WIDTH4 LENGTH4'
- Set the width and length of the printed page region in "pageunits"
- (see `ESC (U' above).
-
- - ESC/P2 command: `ESC (v BC=2 ADVANCE2'
- - ESC/P2 command: `ESC (v BC=4 ADVANCE4'
- Feed vertically ADVANCE "vertical units" (see `ESC (U' above) from
- the current print head position.
-
- - ESC/P2 command: `ESC (V BC=2 ADVANCE2'
- - ESC/P2 command: `ESC (V BC=4 ADVANCE4'
- Feed vertically ADVANCE "vertical units" (see `ESC (U' above) from
- the top margin.
-
- - ESC/P2 command: `ESC ($ BC=4 OFFSET4'
- Set horizontal position to OFFSET from the left margin. This
- command operates on printers of the 740 class and newer (all
- printers with variable dot size).
-
- - ESC/P2 command: `ESC $ OFFSET2'
- Set horizontal position to OFFSET from the left margin. This
- command operates on printers of the 740 class and newer (all
- printers with variable dot size).
-
- - ESC/P2 command: `ESC (\ BC=4 UNITS2 OFFSET2'
- Set horizontal position to OFFSET from the previous print head
- position, measured in UNITS. UNITS is measured in inverse inches,
- and should be set to 1440 in all cases. This operates on all 1440
- dpi printers that do not support variable dot size.
-
- - ESC/P2 command: `ESC (/ BC=4 OFFSET4'
- Set horizontal position to OFFSET from the previous print head
- position, measured in "horizontal units" (see `ESC (U' above).
- This operates on all variable dot size printers.
-
- - ESC/P2 command: `ESC \ OFFSET2'
- Set horizontal position to OFFSET from the previous print head
- position, measured in basic unit of measurement (see `ESC (U'
- above). This is used on all 720 dpi printers, and can also be used
- on 1440 dpi printers in lower resolutions to save a few bytes.
- Note that OFFSET may be negative. The range of values for this
- command is between `-16384' and `16383'.
-
- - ESC/P2 command: `ESC r COLOR1'
- - ESC/P2 command: `ESC (r BC=2 DENSITY1 COLOR1'
- Set the ink color. The first form is used on four-color printers;
- the second on six-color printers. DENSITY is `0' for dark inks,
- `1' for light. COLOR is
-
- `0'
- black
-
- `1'
- magenta
-
- `2'
- cyan
-
- `4'
- yellow
-
- This command is not used on variable dot size printers in softweave
- mode.
-
- - ESC/P2 command: `ESC . COMPRESS1 VSEP1 HSEP1 LINES1 WIDTH2 DATA...'
- Print data. COMPRESS signifies the compression mode:
-
- `0'
- no compression
-
- `1'
- TIFF compression (incorrectly documented as "run length
- encoded")
-
- `2'
- TIFF compression with a special command set.
-
- VSEP depends upon resolution and printer type. At 360 DPI, it is
- always `10'. At 720 DPI, it is normally `5'5. On the ESC 600, it
- is `40' (8 * 5). On some other printers, it varies.
-
- HSEP1 is `10' at 360 DPI and `5' at 720 or 1440 DPI (1440 DPI
- cannot be printed in one pass; it is printed in two passes, with
- the dots separated in each pass by 1/720").
-
- LINES is the number of lines to be printed. It should be `1' in
- microweave and 360 DPI. At 720 DPI softweave, it should be the
- number of lines to be actually printed.
-
- WIDTH is the number of pixels to be printed in each row.
- Following this command, a carriage return (`13' decimal, `0A' hex)
- should be output to return the print head position to the left
- margin.
-
- The basic data format is a string of bytes, with data from left to
- right on the page. Within each byte, the highest bit is first.
-
- The TIFF compression is implemented as one count byte followed by
- one or more data bytes. There are two cases:
-
- 1. If the count byte is `128' or less, it is followed by [count]
- + 1 data bytes. So if the count byte is `0', it is followed
- by 1 data byte; if it is `128', it is followed by 129 data
- bytes.
-
- 2. If the count byte is greater than 128, it is followed by one
- byte. This byte is repeated (257 - [count]) times. So if
- [count] is 129, the next byte is treated as though it were
- repeated 128 times; if [count] is 255, it is treated as
- though it were repeated twice.
-
- - ESC/P2 command: `ESC i COLOR1 COMPRESS1 BITS1 BYTES2 LINES2 DATA...'
- Print data in the newer printers (that support variable dot size),
- and Stylus Pro models.
-
- COLOR is the color:
-
- `0'
- black
-
- `1'
- magenta
-
- `2'
- cyan
-
- `4'
- yellow
-
- `17'
- light magenta
-
- `18'
- light cyan
-
- COMPRESS signifies the compression mode:
-
- `0'
- no compression
-
- `1'
- TIFF compression (incorrectly documented as "run length
- encoded")
-
- `2'
- TIFF compression with a special command set.
-
- BITS is the number of bits per pixel.
-
- BYTES is the number of bytes wide for each row (ceiling(BITS *
- width_of_row, 8)). Note that this is different from the `ESC .'
- command above.
-
- LINES is the number of lines to be printed. This command is the
- only way to get variable dot size printing. In variable dot mode,
- the size of the dots increases as the value (`1', `2', or `3')
- increases.
-
- - ESC/P2 command: `ESC (D BC=4 BASE2 VERTICAL1 HORIZONTAL1'
- Set printer horizontal and vertical spacing. It only applies to
- variable dot size printers in softweave mode (and possibly other
- high end printers).
-
- BASE is the base unit for this command; it must be `14400'.
-
- VERTICAL is the distance in these units between printed rows; it
- should be (separation_in_nozzles * BASE / 720).
-
- HORIZONTAL is the horizontal separation between dots in a row.
- Depending upon the printer, this should be either (14400 / 720) or
- (14400 / 360). The Stylus Pro 9000 manual suggests that the
- settings should match the chosen resolution, but that is
- apparently not the case (or not always the case) on other printers.
-
- - ESC/P2 command: `ESC (R BC=8 00 R E M O T E 1'
- Enters "remote mode". This is a special, undocumented command set
- that is used to set up various printer options, such as paper feed
- tray, and perform utility functions such as head cleaning and
- alignment. It does not appear that anything here is actually
- required to make the printer print. Our best understanding of
- what is in a remote command sequence is described in a separate
- section below.
-
- - ESC/P2 command: `ESC 01 @EJL [sp] ID\r\n'
- Return the printer ID. This is considered a remote mode command,
- although the syntax is that of a conventional command. This
- returns the following information:
-
- @EJL ID\r
- MFG:EPSON;
- CMD:ESCPL2,BDC;
- MDL:[printer model];
- CLS:PRINTER;
- DES:EPSON [printer model];
- \f
-
- After all data has been sent, a form feed byte should be sent.
-
- All newer Epson printers (STC 440, STP 750) require the following
-command to be sent at least once to enable printing at all. This
-command specifically takes the printer out of the Epson packet mode
-communication protocol (whatever that is) and enables normal data
-transfer. Sending it multiple times is is not harmful, so it is
-normally sent at the beginning of each job:
-
- ESC 01@EJL[space]1284.4[newline]@EJL[space][space][space][space]
- [space][newline]ESC@
-
- The proper sequence of initialization commands is:
-
- magic command
- ESC remote mode if needed
- ESC (G
- ESC (U
- ESC (K (if appropriate)
- ESC (i
- ESC U (if needed)
- ESC (s (if appropriate)
- ESC (e
- ESC (C
- ESC (c
- ESC (S
- ESC (D (if needed)
- ESC (V (optional -- this can be accomplished with ESC (v)
-
- For printing, the proper sequence is:
-
- ESC (v
-
-and repeat for each color:
-
- ESC ($ or ESC (\ or ESC \
- ESC (r or ESC r (if needed--not used with `ESC i' and not needed if the color
- has not changed from the previous printed line)
- ESC . or ESC i ...data... [return] (0A hex)
-
- To terminate a page:
-
- [formfeed] (0C hex)
- ESC @
-
-
-File: gimpprint.info, Node: ESC/P2 Remote Mode Commands, Next: ESC/P2 Appropriate Remote Commands, Prev: ESC/P2 Standard Commands, Up: ESC/P2
-
-Remote Mode Commands
-====================
-
- The following description of remote commands comes out of an
-examination of the sequences used by the printer utilities bundled with
-the Windows drivers for the ESC740, and from other sources (some Epson
-manuals, experimentation, analysis of print files). It is largely
-speculative as these commands are not all documented in the Epson
-documentation we have access to. Generally, newer manuals provide more
-thorough documentation.
-
- Remote command mode is entered when the printer is sent the following
-sequence:
-
- ESC (R BC=8 00 R E M O T E 1
-
- Remote mode commands are then sent, and terminated with the following
-sequence:
-
- ESC 00 00 00
-
- All remote mode commands must be sent before the initial `ESC (G'
-command is sent.
-
- This introductory sequence is then followed by a sequence of
-commands. Each command is constructed as follows:
-
- * Two ASCII bytes indicating the function
-
- * A byte count (two bytes, little-endian) for the parameters
-
- * Binary parameters, if any
-
- This is a list of all remote commands we have seen:
-
- - ESC/P2 remote command: `NC BC=2 00 00'
- Print a nozzle check pattern
-
- - ESC/P2 remote command: `VI BC=2 00 00'
- on my 740, prints the following:
-
- W01286 I02382\r\n
-
- probably "version information"
-
- - ESC/P2 remote command: `* AI BC=3 00 00 00'
- Prints a "printer ID". On one 870, prints the following:
- 51-51-50-51-49-48\r\n
-
- The Windows driver has a text entry field where this number can be
- entered, but its purpose is unknown.
-
- - ESC/P2 remote command: `* LD BC=0'
- Load printer defaults from NVRAM, DIP switches, and/or ROM. This
- apparently does not load factory defaults per se, but any settings
- that are saved. This is commonly used right at the end of each
- print job after the `ESC @' printer reset command.
-
- - ESC/P2 remote command: `* CH BC=2 00 XX'
- Perform a head cleaning cycle. The heads to clean are determined
- by parameter XX:
-
- `00'
- clean all heads
-
- `01'
- clean black head
-
- `02'
- clean color heads
-
- While XX = `00' is probably supported by all printers, XX = `01'
- and `02' may well not be.
-
- - ESC/P2 remote command: `* DT BC=3 00 XX 00'
- Print an alignment pattern. There are three patterns, which are
- picked via the choice of XX. Pattern `0' is coarse, pattern `1'
- is medium, and pattern `2' is fine.
-
- - ESC/P2 remote command: `* DU BC=6 00 XX 00 09 00 YY'
- Print another alignment pattern. It isn't entirely clear what XX
- and YY are, but it appears that XX takes on the values `1' and `2'
- , and YY takes on the values `0' and 1. This may only work on the
- 580 and/or 480.
-
- - ESC/P2 remote command: `* DA BC=4 00 XX 00 YY'
- Set results for the first alignment pattern. XX is the pattern
- (`1'-`3'); YY is the best choice from the set (`1'-`7' or
- `1'-`15'). This does not save to NVRAM, so when the printer is
- powered off, the setting will be lost.
-
- - ESC/P2 remote command: `* DA BC=6 00 XX 00 YY 09 00'
- Set results for alternate alignment pattern. XX appears to be the
- pass, and YY appears to be the optimum pattern. This does not
- save to NVRAM, so when the printer is powered off, the setting
- will be lost.
-
- - ESC/P2 remote command: `* SV BC=0'
- Save the current settings to NVRAM.
-
- - ESC/P2 remote command: `* RS BC=1 01'
- Reset the printer.
-
- - ESC/P2 remote command: `* IQ BC=1 01'
- Get ink quantity. This requires direct access to the printer
- port. The return looks like
-
- IQ:KKCCMMYY
-
- or
-
- IQ:KKCCMMYYccmm
-
- (for 4-color and 6-color printers respectively), where each pair of
- digits are hexadecimal representations of percent.
-
- The following two commands have been observed on an STP 870.
-
- - ESC/P2 remote command: `* IR BC=2 00 XX'
- *Function unknown*. This command has been observed on an STP 870
- with XX=`03' at the start of a job and XX=`02' at the end of a job
- (where it is followed by an `LD' command). When in roll mode, the
- values change to XX=`01' at the start of a job and XX=`00' at the
- end of a job.
-
- - ESC/P2 remote command: `* FP BC=3 00 XX YY'
- XX=`00' and YY=`00' selects the printer's normal left margin
- (about 3mm). XX=`0xb0' and YY=`0xff' selects zero-margin mode,
- where the left-most print position is shifted to a point about
- 0.1" to the left of the left-hand edge of the paper, allowing
- printing up to (and off) the left-hand edge of the paper.
-
- The commands below are partially documented in the Stylus Pro 9000
-manual. Much of this information is interpreted; none is tested.
-
- - ESC/P2 remote command: `* SN BC=3 00 XX YY'
- Select Mechanism Sequence. XX controls which sub-operation is
- performed. XX=`00' selects the "Feed paper sequence setting". YY
- can take on the following values (on the STP 870, at any rate):
-
- `0'
- default
-
- `1'
- plain paper
-
- `2'
- postcards
-
- `3'
- film (photo quality glossy film, transparencies)
-
- `4'
- envelopes
-
- `5'
- plain paper (fast load)
-
- `6'
- back light film (although this has been observed with
- heavyweight matte paper)
-
- `7'
- matte paper (observed with 360 dpi inkjet paper, and photo
- quality inkjet paper)
-
- `8'
- photo paper
-
- Experimentation suggests that this setting changes details of how
- the printers' cut sheet feeder works, presumably to tune it for
- different types of paper.
-
- XX=`01' controls the platen gap setting; YY=`00' is the default,
- YY=`1' or `2' are higher settings.
-
- XX=`02' controls paper loading speed (YY=`0' is normal, `1' is
- fast, `2' is slow). It appears that `1' is used when printing on
- "plain paper", "360dpi ink jet paper" or "ink jet transparencies",
- and YY=`00' for all other paper type settings.
-
- XX=`07' controls duplex printing for printers with that capability
- (YY=0 is default, for non-duplex printing; `1' is front side of
- the paper, and 2 is back side).
-
- XX=`09' controls zero margin printing on the printers with the
- capability of printing zero-margin on all sides (Stylus Photo
- 780/790, 890, and 1280/1290). YY=`0' is the default; `1' enables
- zero margin printing.
-
- - ESC/P2 remote command: `* PP BC=3 00 XX YY'
- Set Paper Path. XX=`2' indicates manual feed, XX=`3' is for roll
- paper. YY selects "paper path number".
-
- - ESC/P2 remote command: `* AC BC=2 00 XX'
- Set Auto Cutting State. XX=`0' selects auto cutting off, XX=`1'
- selects auto cutting on, and XX=`2' indicates horizontal print
- page line on. It appears that with auto cutting on, roll paper is
- cut automatically at the point a formfeed character is sent. The
- formfeed character is normally used to eject a page; with this
- turned on, it also cuts the roll paper. Horizontal print page
- line on prints a narrow line of black dots at the position the
- paper should be cut manually.
-
- - ESC/P2 remote command: `* DR BC=4 00 xx DT2'
- Set Drying Time. XX=`00' sets the drying time "per scan" (per
- pass?); XX=`01' sets the drying time per page. DT indicates the
- drying time, which is in seconds if page mode is used and in
- milliseconds if scan mode is used. DT must not exceed 3600
- seconds in per-page mode and 10000 milliseconds in per-scan mode.
-
- - ESC/P2 remote command: `* IK BC=2 00 XX'
- Select Ink Type. XX=`00' selects dye ink. Pigment ink is
- apparently selected by XX=`01'. This probably does not apply to
- the consumer-grade printers.
-
- - ESC/P2 remote command: `* PZ BC=2 00 xx'
- Set Pause After Printing. XX=`00' selects no pause after
- printing; XX=`01' selects pause after printing. If turned on, the
- printer is paused after the page is ejected (by the FF byte). If
- cutting is turned on, the printer is paused *after* the cutting or
- printing of the horizontal cut line.
-
- - ESC/P2 remote command: `* EX BC=6 00 00 00 00 0x14 XX'
- Set Vertical Print Page Line Mode. XX=`00' is off, XX=`01' is on.
- If turned on, this prints vertical trim lines at the left and
- right margins.
-
- - ESC/P2 remote command: `* EX BC=6 00 00 00 00 0x05 XX'
- Set Roll Paper Mode. If XX is `0', roll paper mode is off; if XX
- is `1', roll paper mode is on.
-
- - ESC/P2 remote command: `* EX BC=3 00 XX YY'
- Appears to be a synonym for the `SN' command described above.
-
- - ESC/P2 remote command: `* PH BC=2 00 XX'
- Select Paper Thickness. Set the paper thickness XX in .1 mm
- units. This must not exceed 0x10 (1.6 mm). If the thickness is
- set "more than" .6 mm (which probably means "at least" .6 mm,
- since the other case reads "less than 0.5 mm"), the platen gap is
- set high irrespective of the `SN' command.
-
- - ESC/P2 remote command: `* PM BC=2 00 00'
- *Function unknown*. Used on the STC 3000 at least when using roll
- feed, and on the STP 870 in all print files analysed to date.
-
- - ESC/P2 remote command: `* ST BC=2 00 XX'
- Epson's STP 750/1200 programming guide refers to the `ST' command
- as "Set printer state reply". If XX is `0' or `2', the printer
- will not send status replies. If XX is `1' or `3', the printer
- will send status replies. The status replies consist of state,
- error codes, ink leve, firmware version, and warning status.
-
- The actual reply is documented as
-
- @BDC ST\r
- ST: xx;
- [ER: yy;]
- IQ: n1n2n3n4;
- [WR: w1,w2...;]
- RV: zz;
- AI:CW:02kkccmmyy, MI:mm
- [TC:tttt;]
- INK:...;
- \f
-
- (`\r' is carriage return; `\n' is newline; `\f' is formfeed.)
-
- `ST' is the printer status:
-
- `00'
- Error
-
- `01'
- Self-test
-
- `02'
- Busy
-
- `03'
- Waiting while printing
-
- `04'
- Idle
-
- `07'
- Cleaning/filling ink heads
-
- `08'
- Not yet initialized/filling heads
-
- `ER', if provided, is the error status:
-
- `00'
- Fatal error
-
- `01'
- Interface not selected
-
- `04'
- Paper jam
-
- `05'
- Out of ink
-
- `06'
- Paper out
-
- `IQ' is the amount of ink left, as a (decimal!) percentage
- expressed in hexadecimal. The values are black, cyan, magenta, and
- yellow (presumably 6-color printers supply light cyan and light
- magenta inks as additional parameters).
-
- `WR', if provided, is the warning status:
-
- `10'
- Black ink low
-
- `11'
- Cyan
-
- `12'
- Magenta
-
- `13'
- Yellow
-
- `14'
- Light cyan (presumably)
-
- `15'
- Light magenta (presumably)
-
- `RV' is the firmware revision (one byte ASCII).
-
- `AI' is actuator information. These are two byte ASCII codes that
- indicate "ink weight rank ID" of KCMY, respectively.
-
- `TC', if provided, is the total time of cleaning or ink filling
- (?).
-
- `INK:' and `MI' are *not documented*.
-
- - ESC/P2 remote command: `* SM BC=2 00 XX'
- Set Status Reply Rate. XX is the repeat interval in seconds. If
- XX is `0', the status is returned only when the printer's state
- changes.
-
- - ESC/P2 remote command: `* ST BC=1 01'
- Reply Printer Status. The reply is formatted as
-
- @BDC PS\r\nST:XX;\f
-
- (`\r' is carriage return; `\n' is newline; `\f' is formfeed). If
- XX (the reply value) is `0' or `2', automatic status update is
- disabled; if `1' or `3', it is enabled.
-
- - ESC/P2 remote command: `* SM BC=1 01'
- Reply Printer Status Rate. The reply is formatted as
-
- @BDC PS\r\nST:xx;\f
-
- (`\r' is carriage return; `\n' is newline; `\f' is formfeed). See
- `SM BC=2' above for the meaning of the return value.
-
- - ESC/P2 remote command: `* ?? BC=XX Y[1] ... Y[xx]'
- Echo Parameters (perhaps better described as Echo Commands). The
- command string is executed (it would appear from the
- documentation), and the string sent is returned using a sequence
- similar to that described in the `ST BC=1' and `SM BC=1' commands.
- Note that in this case the number of bytes is variable!
-
- - ESC/P2 remote command: `* SM BC=2 00 02'
- *Function unknown*. Used on the STC 3000 at least when using roll
- feed.
-
-
-File: gimpprint.info, Node: ESC/P2 Appropriate Remote Commands, Prev: ESC/P2 Remote Mode Commands, Up: ESC/P2
-
-Appropriate Remote Commands
-===========================
-
- All of the remote commands described above are wrapped up with the
-usual boilerplate. The files always start with `00 00 00' and the
-"magic" command described above, then two `ESC @'s to reset the
-printer. The remote command sequences come next; if they print anything
-that is usually followed by a `FF' (0C hex) character to feed the page,
-then the file ends with another two `ESC @'s to get back to the ground
-state.
-
- An alignment sequence goes like this:
-
- 1. Host uses `DT' to print an alignment sheet
-
- 2. User eyeballs the sheet to see which is the best aligned pattern.
-
- 3. Host sends a `DA' command indicating which pattern the user chose
-
- 4. If the user said "realign", meaning he isn't done yet, go to step 1
-
- 5. We are done: host sends a `SV' command and exits
-
- The sequence used (by the STC 3000, at least) to print from the roll
-feed is (with byte count omitted)
-
- PM 00 00
- SN 00 00 00
- EX 00 00 00 00 05 01
- ST 00 01
- SM 00 02
-
- The sequence used by the STP 870 to print on plain paper is
-
- PM 00 00
- IR 00 03
- SN 00 00 01
- SN 00 01 00
- SN 00 02 01
- EX 00 00 00 00 05 00
- FP 00 00 00
-
-and the job finishes with
-
- IR 00 02
- LD
-
- For different paper type settings on the STP 870, the arguments to
-`SN' vary. The arguments to the first and third `SN' commands are as
-outlined in the description of the `SN' command above; the arguments to
-the second ("platen gap") are `00 01 01' for thick papers ("matte
-paper--heavyweight", "photo paper" and "premium glossy photo paper")
-and `00 01 00' for all others.
-
- For roll-mode printing, the STP 870's sequence changes as follows.
-`IR''s arguments become `00 01' in the header, and `00 00' after the
-job, and `EX''s last argument changes from `00' to `01'.
-
- For zero-margin printing on the STP 870, the arguments to `FP' become
-`00 0xb0 0xff'. This moves the origin about 5.5mm to the left, to a
-point one tenth of an inch to the left of the left-hand edge of the
-paper, allowing printing right up to (and beyond) the edge of the
-paper. Some printers (at least the STP 870) include white absorbent
-pads at the left margin position and other positions (89mm and 100mm on
-the STP 870) to soak up ink which misses the edge of the paper.
-Printing off the edge of paper of a width not aligned with a pad could
-result in making a mess of the inside of the printer and ink getting on
-the reverse of the paper.
-
-
-File: gimpprint.info, Node: New Printer, Prev: ESC/P2, Up: Appendices
-
-Adding a new printer
-********************
-
- This appendix covers adding a new ESCP/2, PCL, or Canon printer.
-Writing a new driver module is not covered.
-
- The three steps to adding a printer are:
-
- 1. Add an entry to `printers.xml'
-
- 2. Add the appropriate code and data to the appropriate driver module
-
- 3. Tune the printer
-
- Printer information is stored in two places: in `printers.xml'
-(which contains the list of printer models available to the the
-upper-level application), and in the appropriate driver file
-(`print-escp2.c', `print-pcl.c', or `print-canon.c').
-
-* Menu:
-
-* printers.xml:: File format description.
-* Driver file:: Data structures to use.
-* Epson inkjet printers:: Adding an Epson printer.
-* Tuning Epson printers:: Tweaking settings.
-* Canon inkjet printers:: Adding a Canon printer.
-
-
-File: gimpprint.info, Node: printers.xml, Next: Driver file, Up: New Printer
-
-`printers.xml'
-==============
-
- `printers.xml' is an XML-like file (there's no formal DTD) that
-contains very simple printer definitions. A typical definition follows:
-
- <printer name="EPSON Stylus Color 1500" driver="escp2-1500">
- <color>
- <model value=2>
- <gamma value=0.597>
- <density value=1.0>
- <language value=escp2>
- </printer>
-
- There are other tags that may be present. The only ones that are
-mandatory are `<printer>', `<color>', `<model>', and `<language>'. The
-other optional parameters (gamma and density in this case) can be used
-to adjust control settings. This is probably not the right place for
-them; the printer drivers themselves should contain this information.
-There's probably no good reason for anything but gamma and density to
-be in here. Gamma refers to the printer's gamma factor; density is the
-desired base ink density for the printer. The Epson driver contains
-the density information for each printer at each resolution internally.
-An even better driver would adjust density and possibly even gamma for
-paper type. All the more reason not to have that information here.
-
- If you really are curious about what tags are permitted, please see
-`printdefl.l'. I deliberately want to make this obscure.
-
- Anyway, here's the definition of the tags that do matter:
-
- - `printers.xml' tag: `<printer name="LONGNAME" driver="DRIVERNAME">'
- This starts the definition of a printer. The LONGNAME should be
- something human readable; the DRIVERNAME should consist of
- alphanumerics and hyphens, and be fairly short. The LONGNAME is
- what will appear in the GUI listing of printers; the DRIVERNAME is
- what is actually used to key into the list of printers. It is
- legal to have multiple printers with the same driver name.
-
- - `printers.xml' tag: `<color>'
- - `printers.xml' tag: `<nocolor>'
- Indicates that this printer is capable of color, or is not capable
- of color respectively
-
- - `printers.xml' tag: `<model value=INT>'
- This defines a model number. This is passed into the driver,
- which may do whatever it cares to with it--index into a table,
- compute on, or whatever. This need not be unique.
-
- - `printers.xml' tag: `<language value=TYPE>'
- This defines what driver module this printer uses. TYPE should be
- `escp2', `pcl', `canon', or `ps'.
-
- - `printers.xml' tag: `</printer>'
- This, of course, closes off a printer definition.
-
- This is handled very ad-hoc. It's ugly. But it's reasonably easy to
-extend, and it's buzzword-compliant.
-
-
-File: gimpprint.info, Node: Driver file, Next: Epson inkjet printers, Prev: printers.xml, Up: New Printer
-
-The driver file
-===============
-
- Adding a new printer to a driver module (`print-escp2.c',
-`print-pcl.c', or `print-canon.c'--`print-ps.c' is really ad hoc)
-requires a bit more planning. Each driver is somewhat different, but
-they all generally have a vector of printer definitions, and the code
-does some special casing based on particular printer capabilities. The
-PCL and Canon drivers are quite similar; the Canon driver was actually
-cribbed from the PCL driver, but it then returned the favor.
-
- The Epson driver is a little bit different. Canon and PCL printers
-have some amount of intelligence; a lot of them have specific ink
-options, and know about specific paper sizes and types, and must be
-told the right thing. Epson printers have somewhat less intelligence
-and will more or less do exactly what the host tells it to do in a
-fairly regular fashion. I actually prefer this; it isn't materially
-more work for the host to compute things like exact paper sizes and
-such, it allows a lot more tweaking, and it may be why Epson has been
-more open with information - the communication protocol doesn't really
-contain very much IP, so they have less reason to keep it secret.
-
- Someone else will have to fill in the sections about PCL and Canon
-printers.
-