File: lexmarkprotocol.txt

package info (click to toggle)
lexmark7000linux 0.1999-03-28-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 412 kB
  • ctags: 82
  • sloc: ansic: 929; sh: 93; makefile: 56
file content (171 lines) | stat: -rw-r--r-- 4,187 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
$Id: lexmarkprotocol.txt,v 1.6 1999/03/26 21:20:03 henryk Exp $
(C) 1999 Henryk Paluch
Lexmark 7000 - documentation of undocumented protocol
-----------------------------------------------------

This document describes communication protocol used by Lexmark 7000 printer.
The key problem is, that Lexmark consider the protocol top secret &
copyrighted, so all information bellow was guessed! Use on your own risk!



All Escape sequences begin with
<- *
1B 2A

<- *  m  .  @
1B 2A 6D 00 40 ....                   56h bytes   -- Init

<- *  .  s  0
1B 2A 07 73 30
-------- EPSON (?) or PCL (?) sequence - length - various

<- *  .  c
1B 2A 07 63
-------- again EPSON (?) -- various length


1B 2A 6D 00 42 ...
-------------- various init ? -- length - various

<- *  .  .  .
1B 2A 03 04 EA     -- 5 bytes -- 4EAh means offset
-------- paper shift

<- *  .  .  .  .  .  .    .  .  .   .   .   .   .  .  
1B 2A 04 00 00 L1 L2 6x?? N1 N2 HS1 HS2 HE1 HE2 00 00 

   "  3  D  U
   22 33 44 55 01 N1,2x<packets>
-------- print pixels
L1,2  - complete length of the sequence (including data) BE order
N1,N2 - number of packes, BE order
HS1,2 - horizontal offset start
HE1,2 - horizontal offset end
Should be valid: N = (HE-HS)+1

packets

every packet define exatly one vertical line, but it contains information
for both left & right inkjets!

3? FF - where number of zero bits in ?x2 means number of data bytes e.g.
3F FF - no byte follows
3B FF - 2 bytes
37 FF - 2 bytes
36 FF - 4 bytes
35 FF - 4 bytes
32 FF - 2 bytes
31 FF - 2 bytes
30 FF - 8 bytes

1F ?? - like 3? FF
1F FE - 2 bytes
1F E6 - 6 bytes
1F F6 - 4 bytes

NOTE: 2? ?? packets behave very strange. I'm using only 3? ?? packets...

2F FF - 2 bytes ?? why ??

       <--------byte1----------> <--------byte2---------->
2F FF | L1 R1 L2 R2 L3 R3 L4 R4 | L5 R5 L6 R6 L7 R7 L8 R8 |

L? = left ink
R? = right ink

ink jets layout:

         L1    
               R1
         L2    
               R2
         ........
         L8    
               R8

Horizontal resolution is always 600dpi.
Vertical resolution is 300dpi for one series.
Using either left & right series we got 600dpi vertically.
But we must take account the distance betwen two series
(about 16 - visible when doing align test)



3? ?? <bytes 2x zero bits in ?) byte format same as above (Li Ri)
For Example:

3F FC AA AA A0 00
3    F    F   C    LRLRLRLR LRLRLRLR LRLRLRLR LRLRLRLR
0011 1111 11111100 10101010 10101010 10100000 00000000
     ^           ^ highest jet  1= white 0=two bytes
     lowest jet

We should get (hopefully)
     0       -
           0  \
    .........   - number of 1 * 16  10 * 16 = 160 zeroes
     0      - /
           0
     1      -
           0 \
     .......   - 10 * Left black
     1       /
           0\
     .......  - 6 * white
     0      /
          0

    96  + 96 = 192 ink jets

3F sequence can drive 12 * 8 * 2 = 192 ink jets in head


<- *  .  e
1B 2A 07 65 ...  Note: various bytes after sequence  ?? why ??
----------- Paper Eject 

Colour printing
----------------

There is difference in 6x?? packets:

 00 02 01 01 1A 11  Black & White printing (Left cartridge)
 00 03 01 00 18 11  Colour printing (Right cartridge)
          ^^--- cartridge selection 01 = left (Black/Photo)
                                    00 = right (Color)
    ^^--------- motor speed 02 = slower (?) 03 = faster

It is possible to use same data packets for colour and Black & White
packets. 
Colour printing is real nightmare, because there is vertical space
between colors (ooouuuuggggghhhh!). It looks like this for one pass:
O        -| 
     O    |
O         |  64 Cyan Ink Jets
     O   -| 
  x
  x          small vertical space (!)
O        -| 
     O    |
O         |  64 Magenta Ink Jets
     O   -| 
  x
  x          small vertical space (!)
O        -| 
     O    |
O         |  64 Yellow Ink Jets
     O   -| 

The big problem is just in "small vertical space". Try to print
"stairsc.prn" and you'll find that...
 


Notes for Lexmark 5700:
-----------------------
It seems to have only two significant differences:
Different prologue (107 bytes long).
12th byte in main sequence 1B 2A 04 00 00
is set to 01 instead of 11...