diff options
author | Roger Leigh <rleigh@debian.org> | 2008-10-26 16:11:41 +0000 |
---|---|---|
committer | Roger Leigh <rleigh@debian.org> | 2008-10-26 16:11:41 +0000 |
commit | dfae5860833782af557deb35e286d7e186fe3cf5 (patch) | |
tree | e3b4282ae08e120f78cd0c097f7cb3b570e94da2 /doc/developer/escp2.xml | |
parent | 3b59bb0a607ec27ea60f07d1cd5d1bbb4483c832 (diff) |
Imported Upstream version 4.3.99+cvs20050702
Diffstat (limited to 'doc/developer/escp2.xml')
-rw-r--r-- | doc/developer/escp2.xml | 1843 |
1 files changed, 1843 insertions, 0 deletions
diff --git a/doc/developer/escp2.xml b/doc/developer/escp2.xml new file mode 100644 index 0000000..5e4749d --- /dev/null +++ b/doc/developer/escp2.xml @@ -0,0 +1,1843 @@ +<chapter> + <title>ESC/P2</title> + <para> + This is a description of the ESC/P2 raster commands used by the + Gutenprint printer driver, which is a subset of the complete + command set. The full documents are found on <ulink + url="http://www.ercipd.com/isv/edr_docs.htm"> + <citetitle>http://www.ercipd.com/isv/edr_docs.htm</citetitle></ulink>. + Note that these are <emphasis>not</emphasis> always correct, and + are certainly not complete. + </para> + <para> + All ESCP/2 raster commands begin with the <literal>ESC</literal> + character (0x1b), followed by either one or two command characters + and arguments where applicable. Older commands generally have one + command character. Newer commands usually have a + ‘<literal>(</literal>’ (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. + </para> + <para> + All arguments listed here are of the form + <literal>name[bytes]</literal> where <literal>[bytes]</literal> 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. + </para> + <para> + In some cases, the same command sequence identifies different + versions of the same command, depending upon the number of bytes + of arguments. + </para> + <sect1> + <title>Standard commands</title> + <variablelist> + <title>ESC/P2 Commands</title> + <varlistentry> + <term><literal>ESC @</literal></term> + <listitem> + <para> + Reset the printer. Discards any output, ejects the + existing page, returns all settings to their default. + Always use this before printing a page. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (G <varname>BC</varname>=1 + <varname>ON1</varname></literal></term> + <listitem> + <para> + Turn on graphics mode. <varname>ON</varname> should be + <constant>1</constant> (turn on graphics mode). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (U <varname>BC</varname>=1 + <varname>UNIT1</varname></literal></term> + <listitem> + <para> + Set basic unit of measurement used by printer. This is + expressed in multiples of 1/3600". At 720 DPI, + <varname>UNIT</varname> is <constant>5</constant>; at + 360 DPI, <varname>UNIT</varname> is + <constant>10</constant>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (U <varname>BC</varname>=5 + <varname>PAGEUNITS1</varname> <varname>VUNIT1</varname> + <varname>HUNIT1</varname> + <varname>BASEUNIT2</varname></literal></term> + <listitem> + <para> + Set basic units of measurement used by the printer. + <varname>PAGEUNIT</varname> is the unit of page + measurement (for commands that set page dimensions and + the like). <varname>VUNIT</varname> is the unit of + vertical measurement (for vertical movement commands). + <varname>HUNIT</varname> is the unit of horizontal + movement (for horizontal positioning commands). All of + these units are expressed in + <varname>BASEUNIT</varname>, which is in reciprocal + inches. Typically, <varname>BASEUNIT</varname> is + <constant>1440</constant>. In 720 DPI mode, + <varname>PAGEUNIT</varname>, <varname>VUNIT</varname>, + and <varname>HUNIT</varname> are all + <constant>2</constant>; in 1440×720 DPI mode, + <varname>PAGEUNIT</varname> and <varname>VUNIT</varname> + are normally set to <constant>2</constant>; + <varname>HUNIT</varname> is set to + <constant>1</constant>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (K <varname>BC</varname>=2 + <varname>ZERO1</varname> + <varname>GRAYMODE1</varname></literal></term> + <listitem> + <para> + 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. <varname>GRAYMODE</varname> should + be <constant>0</constant> or <constant>2</constant> for + color, <constant>1</constant> for grayscale. + <varname>ZERO</varname> should always be + <constant>0</constant>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (i <varname>BC</varname>=1 + <varname>MICROWEAVE1</varname></literal></term> + <listitem> + <para> + If <varname>MICROWEAVE</varname> is + <constant>1</constant>, 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 + 1440×720) DPI. The Epson Stylus Pro series + indicates additional modes: + </para> + <variablelist> + <varlistentry> + <term><constant>2</constant></term> + <listitem> + <para> + “Full-overlap” + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><constant>3</constant></term> + <listitem> + <para> + “Four-pass” + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><constant>4</constant></term> + <listitem> + <para> + “Full-overlap 2” + </para> + </listitem> + </varlistentry> + </variablelist> + <para> + Any of these commands can be used with the high four + bits set to either <constant>3</constant> or + <constant>0</constant>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC U + <varname>DIRECTION1</varname></literal></term> + <listitem> + <para> + If <varname>DIRECTION</varname> is + <constant>1</constant>, print unidirectionally; if + <constant>0</constant>, print bidirectionally. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (s <varname>BC</varname>=1 + <varname>SPEED1</varname></literal></term> + <listitem> + <para> + On some older printers, this controls the print head + speed. <varname>SPEED</varname> of + <constant>2</constant> is 10 inches/sec; + <varname>SPEED</varname> of <constant>0</constant> or 1 + is 20. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (e <varname>BC</varname>=2 + <varname>ZERO1</varname> + <varname>DOTSIZE1</varname></literal></term> + <listitem> + <para> + Choose print dotsize. <varname>DOTSIZE</varname> can + take on various values, depending upon the printer. + Almost all printers support <constant>0</constant> and + <constant>2</constant>. Variable dot size printers + allow a value of <varname>16</varname>. Other than the + value of <varname>16</varname>, this appears to be + ignored at resolutions of 720 DPI and above. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (C <varname>BC</varname>=2 + <varname>PAGELENGTH2</varname></literal></term> + <term><literal>ESC (C <varname>BC</varname>=4 + <varname>PAGELENGTH4</varname></literal></term> + <listitem> + <para> + Set the length of the page in “pageunits” + (see <literal>ESC (U</literal> 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). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (c <varname>BC</varname>=4 + <varname>TOP2</varname> + <varname>LENGTH2</varname></literal></term> + <term><literal>ESC (c <varname>BC</varname>=8 + <varname>TOP4</varname> + <varname>LENGTH4</varname></literal></term> + <listitem> + <para> + Set the vertical page margins of the page in + “pageunits” (see <literal>ESC (U</literal> + 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). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (S <varname>BC</varname>=8 + <varname>WIDTH4</varname> + <varname>LENGTH4</varname></literal></term> + <listitem> + <para> + Set the width and length of the printed page region in + “pageunits” (see <literal>ESC (U</literal> + above). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (v <varname>BC</varname>=2 + <varname>ADVANCE2</varname></literal></term> + <term><literal>ESC (v <varname>BC</varname>=4 + <varname>ADVANCE4</varname></literal></term> + <listitem> + <para> + Feed vertically <varname>ADVANCE</varname> + “vertical units” (see <literal>ESC + (U</literal> above) from the current print head + position. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (V <varname>BC</varname>=2 + <varname>ADVANCE2</varname></literal></term> + <term><literal>ESC (V <varname>BC</varname>=4 + <varname>ADVANCE4</varname></literal></term> + <listitem> + <para> + Feed vertically <varname>ADVANCE</varname> + “vertical units” (see <literal>ESC + (U</literal> above) from the top margin. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC ($ <varname>BC</varname>=4 + <varname>OFFSET4</varname></literal></term> + <listitem> + <para> + Set horizontal position to <varname>OFFSET</varname> + from the left margin. This command operates on printers + of the 740 class and newer (all printers with variable + dot size). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC $ + <varname>OFFSET2</varname></literal></term> + <listitem> + <para> + Set horizontal position to <varname>OFFSET</varname> + from the left margin. This command operates on printers + of the 740 class and newer (all printers with variable + dot size). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (\ <varname>BC</varname>=4 + <varname>UNITS2</varname> + <varname>OFFSET2</varname></literal></term> + <listitem> + <para> + Set horizontal position to <varname>OFFSET</varname> + from the previous print head position, measured in + <varname>UNITS</varname>. <varname>UNITS</varname> 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. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (/ <varname>BC</varname>=4 + <varname>OFFSET4</varname></literal></term> + <listitem> + <para> + Set horizontal position to <varname>OFFSET</varname> + from the previous print head position, measured in + “horizontal units” (see <literal>ESC + (U</literal> above). This operates on all variable dot + size printers. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC \ + <varname>OFFSET2</varname></literal></term> + <listitem> + <para> + Set horizontal position to <varname>OFFSET</varname> + from the previous print head position, measured in basic + unit of measurement (see <literal>ESC (U</literal> + 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 + <varname>OFFSET</varname> may be negative. The range of + values for this command is between + <constant>-16384</constant> and + <constant>16383</constant>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC r + <varname>COLOR1</varname></literal></term> + <term><literal>ESC (r <varname>BC</varname>=2 + <varname>DENSITY1</varname> + <varname>COLOR1</varname></literal></term> + <listitem> + <para> + Set the ink color. The first form is used on four-color + printers; the second on six-color printers. + <varname>DENSITY</varname> is <constant>0</constant> for + dark inks, <constant>1</constant> for light. + <varname>COLOR</varname> is + </para> + <table> + <title>Colors</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="id"/> + <colspec colnum="2" colname="color"/> + <thead> + <row> + <entry><varname>COLOR</varname></entry> + <entry>Color name</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>Black</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry>Magenta</entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry>Cyan</entry> + </row> + <row> + <entry><constant>4</constant></entry> + <entry>Yellow</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + This command is not used on variable dot size printers + in softweave mode. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC . <varname>COMPRESS1</varname> + <varname>VSEP1</varname> <varname>HSEP1</varname> + <varname>LINES1</varname> <varname>WIDTH2</varname> + data...</literal></term> + <listitem> + <para> + Print data. <varname>COMPRESS</varname> signifies the + compression mode. + </para> + <table> + <title>Compression modes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="id"/> + <colspec colnum="2" colname="compression"/> + <thead> + <row> + <entry><varname>COMPRESS</varname></entry> + <entry>Compression mode</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>No compression</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry> + TIFF compression (incorrectly documented as + “run length encoded”) + </entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry> + TIFF compression with a special command set. + </entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <varname>VSEP</varname> depends upon resolution and + printer type. At 360 DPI, it is always + <constant>10</constant>. At 720 DPI, it is normally + <constant>5</constant>5. On the ESC 600, it is + <constant>40</constant> (8 × 5}). On some other + printers, it varies. + </para> + <para> + <varname>HSEP1</varname> is <constant>10</constant> at + 360 DPI and <constant>5</constant> 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"). + </para> + <para> + <varname>LINES</varname> is the number of lines to be + printed. It should be <constant>1</constant> in + microweave and 360 DPI. At 720 DPI softweave, it should + be the number of lines to be actually printed. + </para> + <para> + <varname>WIDTH</varname> is the number of pixels to be + printed in each row. Following this command, a carriage + return (<constant>13</constant> decimal, + <literal>0A</literal> hex) should be output to return + the print head position to the left margin. + </para> + <para> + 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. + </para> + <para> + The TIFF compression is implemented as one count byte + followed by one or more data bytes. There are two + cases: + </para> + <orderedlist> + <listitem> + <para> + If the count byte is <constant>128</constant> or + less, it is followed by ([count] + 1) data bytes. + So if the count byte is <constant>0</constant>, it + is followed by 1 data byte; if it is + <constant>128</constant>, it is followed by 129 data + bytes. + </para> + </listitem> + <listitem> + <para> + 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. + </para> + </listitem> + </orderedlist> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC i <varname>COLOR1</varname> + <varname>COMPRESS1</varname> <varname>BITS1</varname> + <varname>BYTES2</varname> <varname>LINES2</varname> + data...</literal></term> + <listitem> + <para> + Print data in the newer printers (that support variable + dot size), and Stylus Pro models. + <varname>COLOR</varname> is the color. + </para> + <table> + <title>Extended Colors</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="id"/> + <colspec colnum="2" colname="color"/> + <thead> + <row> + <entry><varname>COLOR</varname></entry> + <entry>Color name</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>Black</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry>Magenta</entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry>Cyan</entry> + </row> + <row> + <entry><constant>4</constant></entry> + <entry>Yellow</entry> + </row> + <row> + <entry><constant>5</constant></entry> + <entry>Alternate black (Stylus C70/C80)</entry> + </row> + <row> + <entry><constant>6</constant></entry> + <entry>Alternate black (Stylus C70/C80)</entry> + </row> + <row> + <entry><constant>16</constant></entry> + <entry>Gray (“light black”)</entry> + </row> + <row> + <entry><constant>17</constant></entry> + <entry>Light magenta</entry> + </row> + <row> + <entry><constant>18</constant></entry> + <entry>Light cyan</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <varname>COMPRESS</varname> signifies the compression + mode: + </para> + <table> + <title>Compression modes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="id"/> + <colspec colnum="2" colname="compression"/> + <thead> + <row> + <entry><varname>COMPRESS</varname></entry> + <entry>Compression mode</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>No compression</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry> + TIFF compression (incorrectly documented as + “run length encoded”) + </entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry> + TIFF compression with a special command set, or + “run length encoding 2” on some + printers. + </entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <varname>BITS</varname> is the number of bits per pixel. + </para> + <para> + <varname>BYTES</varname> is the number of bytes wide for + each row (ceiling(BITS × width_of_row, 8)}). Note + that this is different from the <literal>ESC .</literal> + command above. + </para> + <para> + <varname>LINES</varname> 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 (<constant>1</constant>, + <constant>2</constant>, or <constant>3</constant>) + increases. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (D <varname>BC</varname>=4 + <varname>BASE2</varname> <varname>VERTICAL1</varname> + <varname>HORIZONTAL1</varname></literal></term> + <listitem> + <para> + Set printer horizontal and vertical spacing. It only + applies to variable dot size printers in softweave mode + (and possibly other high end printers). + </para> + <para> + <varname>BASE</varname> is the base unit for this + command; it must be <constant>14400</constant>. + </para> + <para> + <varname>VERTICAL</varname> is the distance in these + units between printed rows; it should be + ((separation_in_nozzles × <varname>BASE</varname> + ÷ 720). + </para> + <para> + <varname>HORIZONTAL</varname> 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. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC (R <varname>BC</varname>=8 00 R E M O T E + 1</literal></term> + <listitem> + <para> + 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. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>ESC 01 @EJL [sp] ID\r\n</literal></term> + <listitem> + <para> + 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: + </para> + <informalexample> + <screen>@EJL ID\r +MFG:EPSON; +CMD:ESCPL2,BDC; +MDL:[printer model]; +CLS:PRINTER; +DES:EPSON [printer model]; +\f</screen> + </informalexample> + <para> + After all data has been sent, a form feed byte should be + sent. + </para> + </listitem> + </varlistentry> + </variablelist> + <para> + 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 + 1284.4 packet mode communication protocol and enables normal + data transfer. Sending it multiple times is is not harmful, so + it is normally sent at the beginning of each job: + </para> + <informalexample> + <screen>ESC 01@EJL[space]1284.4[newline]@EJL[space][space][space][space] +[space][newline]ESC@</screen> + </informalexample> + <para> + The proper sequence of initialization commands is: + </para> + <informalexample> + <screen>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)</screen> + </informalexample> + <para> + For printing, the proper sequence is: + </para> + <informalexample> + <screen>ESC (v</screen> + </informalexample> + <para> + and repeat for each color: + </para> + <!-- This needs better formatting... --> + <informalexample> + <screen>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)</screen> + </informalexample> + <para> + To terminate a page: + </para> + <informalexample> + <screen>[formfeed] (0C hex) +ESC @</screen> + </informalexample> +</sect1> +<sect1> + <title>Remote Mode Commands</title> + <para> + 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. + </para> + <para> + Remote command mode is entered when the printer is sent the + following sequence: + </para> + <informalexample> + <screen>ESC (R BC=8 00 R E M O T E 1</screen> + </informalexample> + <para> + Remote mode commands are then sent, and terminated with the + following sequence: + </para> + <informalexample> + <screen>ESC 00 00 00</screen> + </informalexample> + <para> + All remote mode commands must be sent before the initial + <literal>ESC (G</literal> command is sent. + </para> + <para> + This introductory sequence is then followed by a sequence of + commands. Each command is constructed as follows: + </para> + <orderedlist> + <listitem> + <para> + Two ASCII bytes indicating the function + </para> + </listitem> + <listitem> + <para> + A byte count (two bytes, little-endian) for the parameters + </para> + </listitem> + <listitem> + <para> + Binary parameters, if any + </para> + </listitem> + </orderedlist> + <para> + This is a list of all remote commands we have seen: + </para> + <variablelist> + <title>ESC/P2 Remote Mode Commands</title> + <varlistentry> + <term><literal>NC <varname>BC</varname>=2 00 + 00</literal></term> + <listitem> + <para> + Print a nozzle check pattern. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>VI <varname>BC</varname>=2 00 + 00</literal></term> + <listitem> + <para> + On my 740, prints the following, probably “version + information”: + </para> + <informalexample> + <screen>W01286 I02382\r\n</screen> + </informalexample> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* AI <varname>BC</varname>=3 00 00 00</literal></term> + <listitem> + <para> + Prints a “printer ID”. On one 870, prints the + following: + </para> + <informalexample> + <screen>51-51-50-51-49-48\r\n</screen> + </informalexample> + <para> + The Windows driver has a text entry field where this + number can be entered, but its purpose is unknown. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* LD <varname>BC</varname>=0</literal></term> + <listitem> + <para> + 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 + <literal>ESC @</literal> printer reset command. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* CH <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + Perform a head cleaning cycle. The heads to clean are + determined by parameter <varname>xx</varname>: + </para> + <table> + <title>Head cleaning parameters</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="id"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry><varname>xx</varname></entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>00</constant></entry> + <entry>Clean all heads</entry> + </row> + <row> + <entry><constant>01</constant></entry> + <entry>Clean black head</entry> + </row> + <row> + <entry><constant>02</constant></entry> + <entry>Clean color heads</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + While <varname>xx</varname> = <constant>00</constant> is + likely supported by all printers, <varname>xx</varname> + = <constant>01</constant> and <constant>02</constant> + are not. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* DT <varname>BC</varname>=3 00 + <varname>xx</varname> 00</literal></term> + <listitem> + <para> + Print an alignment pattern. There are three patterns, + which are picked via the choice of + <varname>xx</varname>. Pattern <constant>0</constant> + is coarse, pattern <constant>1</constant> is medium, and + pattern <constant>2</constant> is fine. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* DA <varname>BC</varname>=4 00 + <varname>xx</varname> 00 + <varname>yy</varname></literal></term> + <listitem> + <para> + Set results for the alignment pattern. + <varname>xx</varname> is the pattern + (<constant>1</constant>--<constant>3</constant>); + <varname>yy</varname> is the best choice from the set + (<constant>1</constant>--<constant>7</constant> or + <constant>1</constant>--<constant>15</constant>). This + does not save to NVRAM, so when the printer is powered + off, the setting will be lost. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* SV <varname>BC</varname>=0</literal></term> + <listitem> + <para> + Save the current settings to NVRAM. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* RS <varname>BC</varname>=1 + 01</literal></term> + <listitem> + <para> + Reset the printer. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* IQ <varname>BC</varname>=1 + 01</literal></term> + <listitem> + <para> + Get ink quantity. This requires direct access to the + printer port. The return looks like + </para> + <informalexample> + <screen>IQ:KKCCMMYY</screen> + </informalexample> + <para> + or + </para> + <informalexample> + <screen>IQ:KKCCMMYYccmm</screen> + </informalexample> + <para> + (for 4-color and 6-color printers respectively), where + each pair of digits are hexadecimal representations of + percent. + </para> + </listitem> + </varlistentry> +</variablelist> +<para> + The following two commands have been observed on an STP 870. +</para> +<variablelist> + <varlistentry> + <term><literal>* IR <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + <emphasis>Function unknown</emphasis>. This command has + been observed on an STP 870 with + <varname>xx</varname>=<constant>03</constant> at the start + of a job and <varname>xx</varname>=<constant>02</constant> + at the end of a job (where it is followed by an + <literal>LD</literal> command). When in roll mode, the + values change to + <varname>xx</varname>=<constant>01</constant> at the start + of a job and <varname>xx</varname>=<constant>00</constant> + at the end of a job. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* FP <varname>BC</varname>=3 00 + <varname>pos</varname>[2]</literal></term> + <listitem> + <para> + Specify the horizontal left margin in units of 1/360 inch. + The default value for <varname>pos</varname> is + <constant>0</constant>. For borderless printing on + printers that support it, a value of + <constant>-80</constant> (<constant>FFB0h</constant>) + should be used. + </para> + </listitem> + </varlistentry> + </variablelist> + <para> + The commands below are partially documented in the Stylus Pro + 9000 manual. Much of this information is interpreted; none is + tested. + </para> + <variablelist> + <varlistentry> + <term><literal>* SN <varname>BC</varname>=3 00 + <varname>xx</varname> <varname>yy</varname></literal></term> + <listitem> + <para> + Select Mechanism Sequence. <varname>xx</varname> + controls which sub-operation is performed. + <varname>xx</varname>=<constant>00</constant> selects + the “Feed paper sequence setting”. + <varname>yy</varname> can take on the following values + (on the STP 870, at any rate): + </para> + <table> + <title>Media types</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="id"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry><varname>yy</varname></entry> + <entry>Media type</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>Default</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry>Plain paper</entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry>Postcards</entry> + </row> + <row> + <entry><constant>3</constant></entry> + <entry> + Film (photo quality glossy film, transparencies) + </entry> + </row> + <row> + <entry><constant>4</constant></entry> + <entry>Envelopes</entry> + </row> + <row> + <entry><constant>5</constant></entry> + <entry>Plain paper (fast load)</entry> + </row> + <row> + <entry><constant>6</constant></entry> + <entry> + Back light film (although this has been observed + with heavyweight matte paper) + </entry> + </row> + <row> + <entry><constant>7</constant></entry> + <entry> + Matte paper (observed with 360 dpi inkjet paper, + and photo quality inkjet paper) + </entry> + </row> + <row> + <entry><constant>8</constant></entry> + <entry>Photo paper</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + Experimentation suggests that this setting changes + details of how the printers' cut sheet feeder works, + presumably to tune it for different types of paper. + </para> + <para> + <varname>xx</varname>=<constant>01</constant> controls + the platen gap setting; + <varname>yy</varname>=<constant>00</constant> is the + default, <varname>yy</varname>=<constant>1</constant> or + <constant>2</constant> are higher settings. + </para> + <para> + <varname>xx</varname>=<constant>02</constant> controls + paper loading speed + (<varname>yy</varname>=<constant>0</constant> is normal, + <constant>1</constant> is fast, <constant>2</constant> + is slow). It appears that <constant>1</constant> is + used when printing on “plain paper”, + “360dpi ink jet paper” or “ink jet + transparencies”, and + <varname>yy</varname>=<constant>00</constant> for all + other paper type settings. + </para> + <para> + <varname>xx</varname>=<constant>07</constant> controls + duplex printing for printers with that capability + (<varname>yy</varname>=<varname>0</varname> is default, + for non-duplex printing; <constant>1</constant> is front + side of the paper, and <varname>2</varname> is back + side). + </para> + <para> + <varname>xx</varname>=<constant>09</constant> 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). + <varname>yy</varname>=<constant>0</constant> is the + default; <constant>1</constant> enables zero margin + printing. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* PP <varname>BC</varname>=3 00 + <varname>xx</varname> + <varname>yy</varname></literal></term> + <listitem> + <para> + Set Paper Path. + <varname>xx</varname>=<constant>2</constant> indicates + manual feed, + <varname>xx</varname>=<constant>3</constant> is for roll + paper. <varname>yy</varname> selects “paper path + number”. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* AC <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + Set Auto Cutting State. + <varname>xx</varname>=<constant>0</constant> selects + auto cutting off, + <varname>xx</varname>=<constant>1</constant> selects + auto cutting on, and + <varname>xx</varname>=<constant>2</constant> 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. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* DR <varname>BC</varname>=4 00 xx + <varname>DT2</varname></literal></term> + <listitem> + <para> + Set Drying Time. + <varname>xx</varname>=<constant>00</constant> sets the + drying time “per scan” (per pass?); + <varname>xx</varname>=<constant>01</constant> sets the + drying time per page. <varname>DT</varname> indicates + the drying time, which is in seconds if page mode is + used and in milliseconds if scan mode is used. + <varname>DT</varname> must not exceed 3600 seconds in + per-page mode and 10000 milliseconds in per-scan mode. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* IK <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + Select Ink Type. + <varname>xx</varname>=<constant>00</constant> selects + dye ink. Pigment ink is apparently selected by + <varname>xx</varname>=<constant>01</constant>. This + probably does not apply to the consumer-grade printers. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* PZ BC=2 00 xx</literal></term> + <listitem> + <para> + Set Pause After Printing. + <varname>xx</varname>=<constant>00</constant> selects no + pause after printing; + <varname>xx</varname>=<constant>01</constant> 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 + <emphasis>after</emphasis> the cutting or printing of + the horizontal cut line. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* EX <varname>BC</varname>=6 00 00 00 00 0x14 + <varname>xx</varname></literal></term> + <listitem> + <para> + Set Vertical Print Page Line Mode. + <varname>xx</varname>=<constant>00</constant> is off, + <varname>xx</varname>=<constant>01</constant> is on. If + turned on, this prints vertical trim lines at the left + and right margins. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* EX <varname>BC</varname>=6 00 00 00 00 0x05 + <varname>xx</varname></literal></term> + <listitem> + <para> + Set Roll Paper Mode. If <varname>xx</varname> is + <constant>0</constant>, roll paper mode is off; if + <varname>xx</varname> is <constant>1</constant>, roll + paper mode is on. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* EX <varname>BC</varname>=3 00 + <varname>xx</varname> <varname>yy</varname></literal></term> + <listitem> + <para> + Appears to be a synonym for the <literal>SN</literal> + command described above. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* PH <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + Select Paper Thickness. Set the paper thickness + <varname>xx</varname> in .1 mm units. This must not + exceed <constant>0x10</constant> (1.6 mm). If the + thickness is set “more than” .6 mm (which + probably means “at least” 0.6 mm, since the + other case reads “less than 0.5 mm”), the + platen gap is set high irrespective of the + <literal>SN</literal> command. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* PM <varname>BC</varname>=2 00 + 00</literal></term> + <listitem> + <para> + <emphasis>Function unknown</emphasis>. Used on the STC + 3000 at least when using roll feed, and on the STP 870 + in all print files analysed to date. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* ST <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + Epson's STP 750/1200 programming guide refers to the + <literal>ST</literal> command as “Set printer + state reply”. If <varname>xx</varname> is + <constant>0</constant> or <constant>2</constant>, the + printer will not send status replies. If + <varname>xx</varname> is <constant>1</constant> or + <constant>3</constant>, the printer will send status + replies. The status replies consist of state, error + codes, ink leve, firmware version, and warning status. + </para> + <para> + The actual reply is documented as + </para> + <informalexample> + <screen>@BDC ST\r +ST: xx; +[ER: yy;] +IQ: n1n2n3n4; +[WR: w1,w2...;] +RV: zz; +AI:CW:02kkccmmyy, MI:mm +[TC:tttt;] +INK:...; +\f</screen> + </informalexample> + <para> + (<literal>\r</literal> is carriage return; + <literal>\n</literal> is newline; <literal>\f</literal> + is formfeed.) + </para> + <para> + <literal>ST</literal> is the printer status: + </para> + <table> + <title>Printer status codes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="status"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry>Status code</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>00</constant></entry> + <entry>Error</entry> + </row> + <row> + <entry><constant>01</constant></entry> + <entry>Self-test</entry> + </row> + <row> + <entry><constant>02</constant></entry> + <entry>Busy</entry> + </row> + <row> + <entry><constant>03</constant></entry> + <entry>Waiting while printing</entry> + </row> + <row> + <entry><constant>04</constant></entry> + <entry>Idle</entry> + </row> + <row> + <entry><constant>07</constant></entry> + <entry>Cleaning/filling ink heads</entry> + </row> + <row> + <entry><constant>08</constant></entry> + <entry>Not yet initialized/filling heads</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <literal>ER</literal>, if provided, is the error status: + </para> + <table> + <title>Printer error codes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="error"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry>Error code</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>00</constant></entry> + <entry>Fatal Error</entry> + </row> + <row> + <entry><constant>01</constant></entry> + <entry>Interface not selected</entry> + </row> + <row> + <entry><constant>04</constant></entry> + <entry>Paper jam</entry> + </row> + <row> + <entry><constant>05</constant></entry> + <entry>Out of ink</entry> + </row> + <row> + <entry><constant>06</constant></entry> + <entry>Paper out</entry> + </row> + <row> + <entry><constant>0D</constant></entry> + <entry>Paper gap error</entry> + </row> + <row> + <entry><constant>10</constant></entry> + <entry>Maintenance request</entry> + </row> + <row> + <entry><constant>11</constant></entry> + <entry>Tear-off mode selected</entry> + </row> + <row> + <entry><constant>12</constant></entry> + <entry>Double feed error</entry> + </row> + <row> + <entry><constant>1C</constant></entry> + <entry>Cutter position error</entry> + </row> + <row> + <entry><constant>1D</constant></entry> + <entry>Cutter jam</entry> + </row> + <row> + <entry><constant>1E</constant></entry> + <entry>Ink color error</entry> + </row> + <row> + <entry><constant>23</constant></entry> + <entry>Ink combination error</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <literal>IQ</literal> is the amount of ink left, as a + (decimal!) percentage expressed in hexadecimal. The + values are black, cyan, magenta, and yellow. 6 and 7 + color printers usually specify two or three additional + values for light cyan, light magenta, and gray. + However, some low end 6-color printers specify only four + values. + </para> + <para> + For printers with different ink cartridge options, the + following additional values may appear: + </para> + <table> + <title>Printer additional ink codes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="code"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry>Ink code</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>NA</constant></entry> + <entry>Ink cartridge is not inserted</entry> + </row> + <row> + <entry><constant>RE</constant></entry> + <entry> + Ink cartridge information cannot be read + </entry> + </row> + <row> + <entry><constant>WE</constant></entry> + <entry> + Ink cartridge information cannot be written + </entry> + </row> + <row> + <entry><constant>CI</constant></entry> + <entry> + Ink cartridge is inserted, but has not been read + </entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <literal>WR</literal>, if provided, is the warning status: + </para> + <table> + <title>Printer warning codes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="warning"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry>Warning code</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>10</constant></entry> + <entry> + Black ink low (Photo black on printers using + UltraChrome® ink) + </entry> + </row> + <row> + <entry><constant>11</constant></entry> + <entry>Cyan</entry> + </row> + <row> + <entry><constant>12</constant></entry> + <entry>Magenta</entry> + </row> + <row> + <entry><constant>13</constant></entry> + <entry>Yellow</entry> + </row> + <row> + <entry><constant>14</constant></entry> + <entry>Light cyan (presumably)</entry> + </row> + <row> + <entry><constant>15</constant></entry> + <entry>Light magenta (presumably)</entry> + </row> + <row> + <entry><constant>17</constant></entry> + <entry> + Gray (with UltraChrome-compatible printers) + </entry> + </row> + <row> + <entry><constant>18</constant></entry> + <entry>Matte black 1 (UltraChrome)</entry> + </row> + <row> + <entry><constant>19</constant></entry> + <entry>Matte black 2 (UltraChrome)</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <literal>RV</literal> is the firmware revision (one byte + ASCII). + </para> + <para> + <literal>AI</literal> is actuator information. These + are two byte ASCII codes that indicate ``ink weight rank + ID'' of KCMY, respectively. + </para> + <para> + <literal>TC</literal>, if provided, is the total time of + cleaning or ink filling (?). + </para> + <para> + <literal>RC</literal>, if provided, is the firmware + revision. + </para> + <para> + <literal>INK:</literal> and <literal>MI</literal> are + <emphasis>not documented</emphasis>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* SM <varname>BC</varname>=2 00 + <varname>xx</varname></literal></term> + <listitem> + <para> + Set Status Reply Rate. <varname>xx</varname> is the + repeat interval in seconds. If <varname>xx</varname> is + <constant>0</constant>, the status is returned only when + the printer's state changes. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* ST <varname>BC</varname>=1 + 01</literal></term> + <listitem> + <para> + Reply Printer Status. The reply is formatted as follows: + </para> + <informalexample> + <screen>@BDC PS\r\nST:<varname>xx</varname>;\f</screen> + </informalexample> + <para> + <literal>\r</literal> is carriage return; + <literal>\n</literal> is newline; <literal>\f</literal> is + formfeed). If <varname>xx</varname> (the reply value) is + <constant>0</constant> or <constant>2</constant>, + automatic status update is disabled; if + <constant>1</constant> or <constant>3</constant>, it is + enabled. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* SM <varname>BC</varname>=1 + 01</literal></term> + <listitem> + <para> + Reply Printer Status Rate. The reply is formatted as + follows: + </para> + <informalexample> + <screen>@BDC PS\r\nST:xx;\f</screen> + </informalexample> + <para> + <literal>\r</literal> is carriage return; + <literal>\n</literal> is newline; <literal>\f</literal> is + formfeed). See <literal>SM + <varname>BC</varname>=2</literal> above for the meaning of + the return value. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* ?? + <varname>BC</varname>=<varname>xx</varname> + <varname>y</varname>[1] … + <varname>y</varname>[xx]</literal></term> + <listitem> + <para> + 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 <literal>ST <varname>BC</varname>=1</literal> and + <literal>SM <varname>BC</varname>=1</literal> commands. + Note that in this case the number of bytes is variable! + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* SM <varname>BC</varname>=2 00 + 02</literal></term> + <listitem> + <para> + <emphasis>Function unknown</emphasis>. Used on the STC + 3000 at least when using roll feed. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* JE <varname>BC</varname>=1 + 00</literal></term> + <listitem> + <para> + <emphasis>Function unknown</emphasis>. On new printers + (STC 740 or newer), this command should be sent after + all data has been sent. If this command is not sent, + and the printer is connected to a Windows system, the + last page of the job will not print completely. The + most likely explanation for for this is that the Windows + driver typically puts the printer in 1284.4 packet mode, + and this command has the effect of flushing the buffer + in the printer. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><literal>* CO <varname>BC</varname>=8 00 + <varname>cutter</varname>[1] <varname>page</varname>[1] + <varname>unit</varname>[1] + <varname>position</varname>[4]</literal></term> + <listitem> + <para> + Specify paper cutting on Stylus Photo 2200 (and perhaps + some other printers). <varname>cutter</varname> must be + 0. <varname>page</varname> should be one of the + following: + </para> + <table> + <title>Paper cutting codes</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="code"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry>Code</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>All pages</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry>First page only</entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry>Last page only</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + <varname>unit</varname> should be one of the following: + </para> + <table> + <title>Paper cutting units</title> + <tgroup cols="2" align="left"> + <colspec colnum="1" colname="code"/> + <colspec colnum="2" colname="description"/> + <thead> + <row> + <entry>Code</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry><constant>0</constant></entry> + <entry>1/360 in.</entry> + </row> + <row> + <entry><constant>1</constant></entry> + <entry>1/720 in.</entry> + </row> + <row> + <entry><constant>2</constant></entry> + <entry>1/1440 in.</entry> + </row> + </tbody> + </tgroup> + </table> + <para> + This command should be used twice. The first + <literal>CO</literal> command specifies where the page + will be cut at the top, and the second specifies where + the page will be cut at the bottom. This permits + cutting both the top and the bottom of the page. + </para> + </listitem> + </varlistentry> + </variablelist> + </sect1> + <sect1> + <title>Appropriate Remote Commands</title> + + <para> + All of the remote commands described above are wrapped up with + the usual boilerplate. The files always start with + <literal>00 00 00</literal> and the “magic” + command described above, then two <literal>ESC @</literal>s to + reset the printer. The remote command sequences come next; if + they print anything that is usually followed by a + <literal>FF</literal> (<literal>0C</literal> hex) character to + feed the page, then the file ends with another two + <literal>ESC @</literal>s to get back to the ground state. + </para> + <para> + An alignment sequence goes like this: + </para> + <orderedlist> + <listitem> + <para> + Host uses <literal>DT</literal> to print an alignment + sheet. + </para> + </listitem> + <listitem> + <para> + User eyeballs the sheet to see which is the best aligned + pattern. + </para> + </listitem> + <listitem> + <para> + Host sends a <literal>DA</literal> command indicating + which pattern the user chose. + </para> + </listitem> + <listitem> + <para> + If the user said “realign”, meaning he isn't + done yet, go to step 1. + </para> + </listitem> + <listitem> + <para> + We are done: host sends a <literal>SV</literal> command + and exits. + </para> + </listitem> + </orderedlist> + + <para> + The sequence used (by the STC 3000, at least) to print from + the roll feed is (with byte count omitted): + </para> + <informalexample> + <screen>PM 00 00 +SN 00 00 00 +EX 00 00 00 00 05 01 +ST 00 01 +SM 00 02</screen> + </informalexample> + <para> + The sequence used by the STP 870 to print on plain paper is + </para> + <informalexample> + <screen>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</screen> + </informalexample> + <para> + and the job finishes with + </para> + <informalexample> + <screen>IR 00 02 +LD</screen> + </informalexample> + <para> + For different paper type settings on the STP 870, the + arguments to <literal>SN</literal> vary. The arguments to the + first and third <literal>SN</literal> commands are as outlined + in the description of the <literal>SN</literal> command above; + the arguments to the second (“platen gap”) are + <literal>00 01 01</literal> for thick papers (“matte + paper—heavyweight”, “photo paper” and + “premium glossy photo paper”) and <literal>00 01 + 00</literal> for all others. + </para> + <para> + For roll-mode printing, the STP 870's sequence changes as + follows. <literal>IR</literal>'s arguments become <literal>00 + 01</literal> in the header, and <literal>00 00</literal> after + the job, and <literal>EX</literal>'s last argument changes + from <constant>00</constant> to <constant>01</constant>. + </para> + <para> + For zero-margin printing on the STP 870, the arguments to + <literal>FP</literal> become <literal>00 0xb0 0xff</literal>. + 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. + </para> + </sect1> +</chapter> |