diff --git a/PROTOCOL b/PROTOCOL index f7f4cc5..fb08edb 100644 --- a/PROTOCOL +++ b/PROTOCOL @@ -20,12 +20,12 @@ Identified commands: * 0x000 NULL ??? No idea what this does * 0x101 DISCOVER - * 0x130 GET_ID (IEEE1284 Printer ID) - * 0x120 GET_STATUS - * 0x151 FLUSH * 0x110 START_TCP * 0x111 END_JOB ?? Sent at end of job + * 0x120 GET_STATUS * 0x121 DATA + * 0x130 GET_ID (IEEE1284 Printer ID) + * 0x151 FLUSH DISCOVER_REQ (0x0101) --------------------- @@ -70,6 +70,76 @@ GET_ID_RESP (0x8130) 00 45 IEEE1284 string length [rest] IEEE1284 data, semicolon separated tokens +FLUSH_REQ (0x0151) +------------------- +43 50 4e 50 CPNP +01 51 FLUSH +00 00 00 07 SEQUENCE +00 00 00 00 (no args) +00 04 4-byte payload + +00 00 00 00 + +FLUSH_RESP (0x8151) +-------------------- +43 50 4e 50 CPNP +81 51 FLUSH +00 00 00 07 SEQUENCE +00 00 00 00 (no args) +00 04 4-byte payload + +00 00 10 00 + +START_TCP_REQ (0x0110) +------------------- +43 50 4e 50 CPNP +01 10 START_TCP +00 00 00 07 SEQUENCE +00 00 00 00 (no args) +01 88 392-byte payload + +00 00 00 00 00 00 00 00 + +00 4b 00 41 00 4c 00 41 +00 4d 00 41 00 54 00 41 00 00 00 00 00 00 00 00 PC name (UTF-16) +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 + +00 70 00 69 00 7a 00 7a +00 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 username (UTF-16) +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 + +00 54 00 65 00 73 00 74 +00 20 00 50 00 61 00 67 00 65 00 00 00 00 00 00 Job name (UTF-16) +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 + +START_TCP_RESP (0x8151) +-------------------- +43 50 4e 50 CPNP +81 10 START_TCP +00 00 00 07 SEQUENCE +00 00 00 00 (no args) +00 08 8-byte payload + +30 30 30 30 PP PP 00 00 PP == TCP PORT. + NULL_REQ (0x0000) ----------------- 43 50 4e 50 CPNP @@ -94,7 +164,7 @@ GET_STATUS_REQ (0x0120) 43 50 4e 50 CPNP 01 20 GET_STATUS 00 00 00 00 SEQUENCE -00 XX 00 00 (??? Job ID for TCP?) +00 XX 00 00 (??? Job ID for TCP? 0x01 or 0x02?) 00 00 (no payload) GET_STATUS_RESP (0x8120) over UDP @@ -152,13 +222,14 @@ GET_STATUS_RESP (0x8120) over TCP [ Attempt to decode the details ] 00 00 01 10 04 04 00 00 00 00 00 00 00 00 00 00 - 00 00 SS 00 01 00 00 00 XX XX XX XX YY YY YY YY + PP 00 SS 00 01 00 00 00 XX XX XX XX YY YY YY YY 00 90 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SS: State. 00 wait/01 flags/02 data req/03 done/04 error XX: Data req offset (Little endian) YY: Data req length (Little endian) + PP: Next Plane => 00 == Y, 01 == M, 02 == C. [ Examples of output I've seen ] @@ -231,19 +302,32 @@ DATA (0x0121) 43 50 4e 50 CPNP 01 21 DATA 00 00 00 00 SEQUENCE -00 01 00 00 (args) -00 40 (payload len) +00 ZZ 00 00 (args/jobid) +00 40 (payload len, varies) -Three variations. First one is flags: +Four variations. First one is flags: -00 00 00 00 XX XX XX XX 00 00 00 00 YY YY YY YY XX == msg len (64) YY == unknown, always 0x01 -00 00 QQ 00 00 00 00 00 00 00 00 00 00 00 00 00 QQ: 03 border, 02 none +00 00 00 00 XX XX XX XX TT TT TT TT YY YY YY YY XX == msg len (0x40) + TT == 0x01 ??? + YY == 00 00 40 00 (for YMC???) +00 00 00 RR 00 00 00 00 00 00 00 00 00 00 00 00 RR: 03 border, 02 none 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -Second one is pure payload. payload len is actual bytes. (Max 4096 bytes?) -Third one is the end of job stuff: +Second variation is for planar YMC data, consisting of 28B plane header, filled to 4KiB of size: + +00 00 01 00 XX XX XX XX 01 00 00 00 YY YY YY YY XX == total data len, YY == plane len (delta is header len, ie 28 bytes) + +00 00 00 QQ 00 00 00 00 00 00 00 00 00 00 00 00 +HH HH 00 00 VV VV 00 00 ?? 00 00 00 HH == rows (1232) + VV == cols (1808) + ?? == plane (00/01/02 == Y/M/C) +[... initial payload ...] + +Third one is pure payload, used by jpeg printing. + +Fourth one is the end of job stuff: 00 00 03 00 XX XX XX XX 00 00 00 00 00 00 00 00 XX == msg len (64) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @@ -260,18 +344,9 @@ DATA_RESP (0x8121) Payload is always 4 bytes: -00 00 XX 00 00 00 LL LL LL == bytes received - XX == printer state. - 00: Wait [ busy? ] - 01: Send flags [ ready for job ] - 02: Send data [ ready for image data ] - 03: Done [ print complete, send final packet ] - 04: Error [ reported error ] - - Not sure how to tell the difference which one is in use? END_JOB_REQ (0x0111) --------------------