diff --git a/epson_print_conf.py b/epson_print_conf.py index 58a701a..d895dbb 100644 --- a/epson_print_conf.py +++ b/epson_print_conf.py @@ -2544,7 +2544,8 @@ class EpsonPrinter: def print_test_color_pattern( self, get_pattern=False, - get_fullpattern=False + get_fullpattern=False, + use_black23=False ): """ Print a one-page color test pattern at various quality levels via LPR. @@ -2560,13 +2561,17 @@ class EpsonPrinter: status = True lpr = LprClient(self.hostname, port="LPR", label="Check nozzles") - # Transfer Raster image commands (ESC i), Color, Run Length Encoding, 2bits per pixel - TRI_BLACK = "1b6900010250008000" # ESC i 0: Black - TRI_MAGENTA = "1b6901010250002a00" # ESC i 1: Magenta - TRI_YELLOW = "1b6904010250002a00" # ESC i 4: Yellow - TRI_CYAN = "1b6902010250002a00" # ESC i 2: Cyan + # Transfer Raster image commands (ESC i), Color, Run Length Encoding, + # 2 bits per pixel, 4 pixels per byte, H: 80 bytes = 320 dots = h 2,26 cm @ 360dpi (320/360*2,54) + TRI_BLACK = "1b6900010250008000" # ESC i 0: Black, V: 128 dots/rows (monochrome, 180 dpi) = 128/120*2,54= v 2,7 cm + TRI_MAGENTA = "1b6901010250002a00" # ESC i 1: Magenta, V: 42 dots/rows + TRI_YELLOW = "1b6904010250002a00" # ESC i 4: Yellow, V: 42 dots/rows dots + TRI_CYAN = "1b6902010250002a00" # ESC i 2: Cyan, V: 42 dots/rows + TRI_BLACK2 = "1b6905010250002a00" # ESC i 5: black2, V: 42 dots/rows + TRI_BLACK3 = "1b6906010250002a00" # ESC i 6: black3, V: 42 dots/rows - SET_H_POS = "1b28240400" # ESC ( $ = Set absolute horizontal print position (first part) + SET_H_POS = "1b28240400" # ESC ( $ = Set absolute horizontal print position, 4 bytes (n=length, first part) + SET_V_POS = "1b28760400" # ESC (v nL nH mL mH, 4 bytes (n=length, first part) = Set relative vertical print position USE_MONOCHROME = "1b284b02000001" # ESC ( K = Monochrome Mode / Color Mode Selection, 01H: Monochrome mode USE_COLOR = "1b284b02000000" # ESC ( K = Monochrome Mode / Color Mode Selection, 00H: Default mode (color mode) @@ -2580,18 +2585,20 @@ class EpsonPrinter: } # Each sequence has 2 bits per pixel: 00=No, 01=Small, 10=Medium, 11=Large - # Using Run-Length Encoding (RLE), d9 (217>127) means pattern repeated 257-217=40 times. - PATTERN_LARGE = "d9ff" # ff = 11111111 = 11|11|11|11 = Large - PATTERN_MEDIUM = "d9aa" # aa = 10101010 = 10|10|10|10 = Medium - PATTERN_SMALL = "d955" # 55 = 01010101 = 01|01|01|01 = Small - PATTERN_NONE = "d900" # 00 = 00000000 = 00|00|00|00 = No - PATTERN_NO_DOTS = PATTERN_NONE + PATTERN_NONE + # Using Run-Length Encoding (RLE), d9 (217>127) means pattern repeated 257-217=40 times (160 dots per pattern). + # These allow creating alternating patterns and are also used for solid patterns + PATTERN_LARGE = "d9ff" # ff = 11111111 = 11|11|11|11 = Large, 4 dots x 40 + PATTERN_MEDIUM = "d9aa" # aa = 10101010 = 10|10|10|10 = Medium, 4 dots x 40 + PATTERN_SMALL = "d955" # 55 = 01010101 = 01|01|01|01 = Small, 4 dots x 40 + PATTERN_NONE = "d900" # 00 = 00000000 = 00|00|00|00 = No, 4 dots x 40 + PATTERN_NO_DOTS = PATTERN_NONE + PATTERN_NONE # 320 dots, (4+4) dots x 40 + # Alternating patterns, 640 dots each = 2 hor. lines, one above the other PATTERN_LARGE_ALT = PATTERN_LARGE + PATTERN_NO_DOTS + PATTERN_LARGE PATTERN_MEDIUM_ALT = PATTERN_MEDIUM + PATTERN_NO_DOTS + PATTERN_MEDIUM PATTERN_SMALL_ALT = PATTERN_SMALL + PATTERN_NO_DOTS + PATTERN_SMALL - # Define the printing segments - each represents a label with different patterns and text + # 6 vertically stacked printing segments, each of 4 hor stacked blocks printing_segments = [ { "label_sequence": lpr.EXIT_REMOTE_MODE @@ -2643,7 +2650,8 @@ class EpsonPrinter: """ command_parts = [] - for segment in printing_segments: + # Define the 4 hor stacked blocks for each vertically stacked segment + for segment in printing_segments: # 6 printing segments # Label command_parts.append(segment["label_sequence"].hex()) @@ -2651,58 +2659,74 @@ class EpsonPrinter: # Initialization command_parts.append( "1b2847010001" # Select graphics mode - + "1b28550500010101a005" # ESC (U = Sets 360 DPI resolutio + + "1b28550500010101a005" # ESC (U = Sets 360 DPI resolution + "1b28430400c6410000" # ESC (C = Configures page lenght + "1b28630800ffffffffc6410000" # ESC (c = Set page format + "1b28530800822e0000c6410000" # ESC (S = paper dimension specification - + "1b2844040068010301" # ESC (D = raster image resolution + + "1b28440400" + "68010301" # ESC (D = raster image resolution, r=360, v=3, h=1; 360/3=120 dpi vertically, 360/1=360 dpi horizontally + "1b2865020000" + vsd_code[segment["vsd"]] # ESC (e = Select Ink Drop Size + "1b5502" # ESC U 02H = selects automatic printing direction control + USE_MONOCHROME - + "1b2876040000010000" # ESC (v = Set relative vertical print position + + SET_V_POS + "00010000" # ESC (v = Set relative vertical print position, 256 units = 4.52 mm ) # First block - black alternating - command_parts.append(SET_H_POS + "00010000") # ESC ( $ = Set absolute horizontal print position + command_parts.append(SET_H_POS + "00010000") # ESC ( $ = Set absolute horizontal print position, 256 = 4,52 mm command_parts.append(TRI_BLACK) - command_parts.append(segment["alternating_pattern"] * 64) + command_parts.append(segment["alternating_pattern"] * 64) # 64 x 2 = 128 rows = v 2,7 cm # Second block - Yellow/Magenta/Cyan alternating - command_parts.append(USE_COLOR + SET_H_POS + "80060000") # ESC ( $ = Set absolute horizontal print position + command_parts.append(USE_COLOR + SET_H_POS + "80060000") # ESC ( $ = Set absolute horizontal print position, 1664 = 29,35 mm command_parts.append(TRI_MAGENTA) command_parts.append(segment["alternating_pattern"] * 64) - command_parts.append(SET_H_POS + "80060000") + command_parts.append(SET_H_POS + "80060000") # ESC ( $ = Set absolute horizontal print position, 1664 = 29,35 mm command_parts.append(TRI_YELLOW) command_parts.append(segment["alternating_pattern"] * 64) - command_parts.append(SET_H_POS + "80060000") + command_parts.append(SET_H_POS + "80060000") # ESC ( $ = Set absolute horizontal print position, 1664 = 29,35 mm command_parts.append(TRI_CYAN) command_parts.append(segment["alternating_pattern"] * 64) # Third block - Black solid - command_parts.append(USE_MONOCHROME + SET_H_POS + "000c0000") # ESC ( $ = Set absolute horizontal print position + command_parts.append(USE_MONOCHROME + SET_H_POS + "000c0000") # ESC ( $ = Set absolute horizontal print position, 3072 = 54,35 mm command_parts.append(TRI_BLACK) - command_parts.append(segment["solid_pattern"] * 256) + command_parts.append(segment["solid_pattern"] * 256) # 256 x (160 h dots per pattern / 320 h dots per line) = 128 v rows = v 2,7 cm # Fourth block - Yellow/Magenta/Cyan solid - command_parts.append(USE_COLOR + SET_H_POS + "80110000") # ESC ( $ = Set absolute horizontal print position + command_parts.append(USE_COLOR + SET_H_POS + "80110000") # ESC ( $ = Set absolute horizontal print position, 4480 = 79 mm command_parts.append(TRI_MAGENTA) command_parts.append(segment["solid_pattern"] * 256) - command_parts.append(SET_H_POS + "80110000") + command_parts.append(SET_H_POS + "80110000") # ESC ( $ = Set absolute horizontal print position, 4480 = 79 mm command_parts.append(TRI_YELLOW) command_parts.append(segment["solid_pattern"] * 256) - command_parts.append(SET_H_POS + "80110000") + command_parts.append(SET_H_POS + "80110000") # ESC ( $ = Set absolute horizontal print position, 4480 = 79 mm command_parts.append(TRI_CYAN) command_parts.append(segment["solid_pattern"] * 256) + + # Fifth block - Black/Black2/Black3 solid + if use_black23: + command_parts.append(USE_COLOR + SET_H_POS + "00170000") # ESC ( $ = Set absolute horizontal print position, 5888 = 103,8 mm + + command_parts.append(TRI_BLACK) + command_parts.append(segment["solid_pattern"] * 256) + + command_parts.append(SET_H_POS + "00170000") # ESC ( $ = Set absolute horizontal print position, 5888 = 103,8 mm + command_parts.append(TRI_BLACK2) + command_parts.append(segment["solid_pattern"] * 256) + + command_parts.append(SET_H_POS + "00170000") # ESC ( $ = Set absolute horizontal print position, 5888 = 103,8 mm + command_parts.append(TRI_BLACK3) + command_parts.append(segment["solid_pattern"] * 256) - command_parts.append("1b2876040000030000") # ESC (v = Set relative vertical print position (move down) - + command_parts.append(SET_V_POS + "00030000") # ESC (v = Set relative vertical print position + # Relative vertical offset = 768 units = 13.54 mm + command_parts.append( ( lpr.INITIALIZE_PRINTER