Tizen 2.1 base
[platform/upstream/hplip.git] / base / maint.py
1 # -*- coding: utf-8 -*-
2 #
3 # (c) Copyright 2003-2007 Hewlett-Packard Development Company, L.P.
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 # Author: Don Welch, Naga Samrat Chowdary Narla,
20 #
21
22 # NOTE: Not used by Qt4 code. Use maint_*.py modules instead.
23
24 # Local
25 from g import *
26 from codes import *
27 import status, pml
28 from prnt import pcl, ldl, colorcal
29
30 # ********************** Align **********************
31
32 def AlignType1(dev, loadpaper_ui): # Auto VIP (using embedded PML)
33     ok = loadpaper_ui()
34     if ok:
35         dev.writeEmbeddedPML(pml.OID_AUTO_ALIGNMENT,
36                              pml.AUTO_ALIGNMENT, style=0,
37                              direct=True)
38         dev.closePrint()
39
40     return ok
41
42 def AlignType1PML(dev, loadpaper_ui): # Auto VIP (using PML)
43     ok = loadpaper_ui()
44     if ok:
45         dev.setPML(pml.OID_AUTO_ALIGNMENT, pml.AUTO_ALIGNMENT)
46         dev.closePML()
47
48     return ok
49
50
51
52 def AlignType2(dev, loadpaper_ui, align_ui, bothpens_ui): # 8xx
53     state, a, b, c, d = 0, 6, 6, 3, 3
54     ok = False
55     while state != -1:
56         if state == 0:
57             state = 1
58             pens = dev.getStatusFromDeviceID()['agents']
59             pen_types = [pens[x] for x in range(len(pens))]
60             if AGENT_TYPE_NONE in pen_types:
61                 log.error("Cannot perform alignment with 0 or 1 pen installed.")
62                 state = 100
63
64         elif state == 1:
65             state = -1
66             ok = loadpaper_ui()
67             if ok:
68                 state = 2
69
70         elif state == 2:
71             state = -1
72             alignType2Phase1(dev)
73             ok, a = align_ui('A', 'h', 'kc', 2, 11)
74             if ok:
75                 state = 3
76
77         elif state == 3:
78             state = -1
79             ok, b = align_ui('B', 'v', 'kc', 2, 11)
80             if ok:
81                 state = 4
82
83         elif state == 4:
84             state = -1
85             ok, c = align_ui('C', 'v', 'kc', 2, 5)
86             if ok:
87                 state = 5
88
89         elif state == 5:
90             state = -1
91             ok, d = align_ui('D', 'v', 'c', 2, 5)
92             if ok:
93                 state = 6
94
95         elif state == 6:
96             ok = loadpaper_ui()
97             if ok:
98                 alignType2Phase2(dev, a, b, c, d)
99             state = -1
100
101         elif state == 100:
102             ok = False
103             bothpens_ui()
104             state = -1
105
106     return ok
107
108
109
110 def AlignType3(dev, loadpaper_ui, align_ui, paperedge_ui, align_type): # 9xx
111     state, a, b, c, d, zca = 0, 6, 6, 3, 3, 6
112     ok = False
113     while state != -1:
114         if state == 0:
115             state = -1
116             ok = loadpaper_ui()
117             if ok:
118                 alignType3Phase1(dev)
119                 state = 1
120
121         elif state == 1:
122             state = -1
123             ok, a = align_ui('A', 'h', 'kc', 2, 11)
124             if ok:
125                 state = 2
126
127         elif state == 2:
128             state = -1
129             ok, b = align_ui('B', 'v', 'kc', 2, 11)
130             if ok:
131                 state = 3
132
133         elif state == 3:
134             state = -1
135             ok, c = align_ui('C', 'v', 'k', 2, 11)
136             if ok:
137                 state = 4
138
139         elif state == 4:
140             state = -1
141             ok, d = align_ui('D', 'v', 'kc', 2, 11)
142             if ok:
143                 state = 5
144
145         elif state == 5:
146             state = -1
147             alignType3Phase2(dev, a, b, c, d)
148             if align_type == 9:
149                 state = 7
150             else:
151                 ok = loadpaper_ui()
152                 if ok:
153                     state = 6
154
155         elif state == 6:
156             state = -1
157             alignType3Phase3(dev)
158             ok, zca = paperedge_ui(13)
159             if ok:
160                 state = 7
161
162         elif state == 7:
163             ok = loadpaper_ui()
164             if ok:
165                 alignType3Phase4(dev, zca)
166             state = -1
167
168     return ok
169
170
171 def AlignxBow(dev, align_type, loadpaper_ui, align_ui, paperedge_ui,
172                invalidpen_ui, coloradj_ui): # Types 4, 5, and 7
173
174     state, statepos = 0, 0
175     user_cancel_states = [1000, -1]
176     a, b, c, d, e, f, g = 0, 0, 0, 0, 0, 0, 0
177     error_states = [-1]
178     ok = False
179
180     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
181
182     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
183         state, states = 100, [-1]
184
185     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
186         state, states = 0, [2, 200, 3, -1]
187
188     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
189         state, states = 0, [2, 200, 3, -1]
190
191     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
192         state, states = 0, [2, 300, 3, -1]
193
194     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
195         state, states = 0, [2, 400, 500, 600, 700, 3, 4, -1]
196
197     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
198         state, states = 0, [2, 400, 500, 600, 700, 800, 900, 3, 4, -1]
199
200     while state != -1:
201
202         if state == 0:
203             ok = loadpaper_ui()
204             if ok:
205                 if align_type == 4:
206                     alignType4Phase1(dev)
207                 elif align_type == 5:
208                     alignType5Phase1(dev)
209                 elif align_type == 7:
210                     alignType7Phase1(dev)
211                 else:
212                     statepos, states = 0, error_states
213             else:
214                 statepos, states = 0, user_cancel_states
215
216
217         elif state == 2:
218             ok, a = paperedge_ui(13)
219             if not ok:
220                 statepos, states = 0, user_cancel_states
221
222         elif state == 3:
223             if align_type == 4:
224                 alignType4Phase2(dev, a, b, c, d, e)
225             elif align_type == 5:
226                 alignType5Phase2(dev, a, b, c, d, e, f, g)
227             else:
228                 alignType7Phase2(dev, a, b, c, d, e, f, g)
229
230         elif state == 4:
231             ok = loadpaper_ui()
232             if ok:
233                 if align_type == 4:
234                     alignType4Phase3(dev)
235                 elif align_type == 5:
236                     alignType5Phase3(dev)
237                 else:
238                     alignType7Phase3(dev)
239             else:
240                 statepos, states = 0, user_cancel_states
241
242         elif state == 100:
243             invalidpen_ui()
244             state = -1
245
246         elif state == 200: # B Line - Black only or photo only
247             ok, b = align_ui('B', 'v', 'k', 2, 11)
248             if not ok:
249                 statepos, states = 0, user_cancel_states
250
251         elif state == 300: # B Line - Color only
252             ok, b = align_ui('B', 'v', 'kc', 2, 11)
253             if not ok:
254                 statepos, states = 0, user_cancel_states
255
256         elif state == 400: # B Line - 2 pen
257             ok, b = align_ui('B', 'h', 'kc', 2, 17)
258             if not ok:
259                 statepos, states = 0, user_cancel_states
260
261         elif state == 500: # C Line
262             ok, c = align_ui('C', 'v', 'kc', 2, 17)
263             if not ok:
264                 statepos, states = 0, user_cancel_states
265
266         elif state == 600 : # D Line
267             ok, d = align_ui('D', 'v', 'k', 2, 11)
268             if not ok:
269                 statepos, states = 0, user_cancel_states
270
271         elif state == 700: # E Line
272             ok, e = align_ui('E', 'v', 'kc', 2, 11)
273             if not ok:
274                 statepos, states = 0, user_cancel_states
275
276         elif state == 800: # F Line
277             ok, f = coloradj_ui('F', 21)
278             if not ok:
279                 statepos, states = 0, user_cancel_states
280
281         elif state == 900: # G Line
282             ok, f = coloradj_ui('G', 21)
283             if not ok:
284                 statepos, states = 0, user_cancel_states
285
286         elif state == 1000: # User cancel
287             ok = False
288             log.warning("Alignment canceled at user request.")
289
290         state = states[statepos]
291         statepos += 1
292
293     return ok
294
295
296 def AlignType6(dev, ui1, ui2, loadpaper_ui):
297     state = 0
298     ok = False
299
300     while state != -1:
301         if state == 0:
302             state = 2
303             accept = ui1()
304             if not accept:
305                 # Need to printout alignment page
306                 state = 1
307
308         elif state == 1: # Load and print
309             state = -1
310             ok = loadpaper_ui()
311             if ok:
312                 alignType6Phase1(dev)
313                 state = 2
314
315         elif state == 2: # Finish
316             ui2()
317             state = -1
318
319
320     return ok
321
322 def AlignType8(dev, loadpaper_ui, align_ui): # 450
323     state, a, b, c, d = 0, 5, 5, 5, 5
324     ok = False
325
326     while state != -1:
327
328         if state == 0:
329             state = -1
330             ok = loadpaper_ui()
331             if ok:
332                 num_inks = alignType8Phase1(dev)
333                 state = 1
334
335         elif state == 1:
336             state = -1
337             ok, a = align_ui('A', 'v', 'k', 3, 9)
338             if ok:
339                 state = 2
340
341         elif state == 2:
342             state = -1
343             ok, b = align_ui('B', 'v', 'c', 3, 9)
344             if ok:
345                 state = 3
346
347         elif state == 3:
348             state = -1
349             ok, c = align_ui('C', 'v', 'kc', 3, 9)
350             if ok:
351                 state = 4
352
353         elif state == 4:
354             state = -1
355             ok, d = align_ui('D', 'h', 'kc', 3, 9)
356             if ok:
357                 state = 5
358
359         elif state == 5:
360             alignType8Phase2(dev, num_inks, a, b, c, d)
361             state = -1
362
363     return ok
364
365
366 def AlignType10(dev, loadpaper_ui, align_ui):
367     pattern = alignType10SetPattern(dev)
368     state = 0
369
370     while state != -1:
371         if state == 0:
372             state = -1
373             ok = loadpaper_ui()
374             if ok:
375                 alignType10Phase1(dev)
376                 state = 1
377
378         elif state == 1:
379             values = align_ui(pattern, ALIGN_TYPE_LBOW)
380             log.debug(values)
381             alignType10Phase2(dev, values, pattern)
382             state = 2
383
384         elif state == 2:
385             state = -1
386             ok = loadpaper_ui()
387             if ok:
388                 alignType10Phase3(dev)
389
390
391 def alignType10SetPattern(dev):
392     pattern = None
393     pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
394     log.debug("Pen config=%d" % pen_config)
395
396     if pen_config == AGENT_CONFIG_BLACK_ONLY:
397         pattern = 1
398
399     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
400         pattern = 2
401
402     elif pen_config in (AGENT_CONFIG_COLOR_AND_PHOTO, AGENT_CONFIG_COLOR_AND_GREY):
403         pattern = 3
404
405     log.debug("Pattern=%d" % pattern)
406     return pattern
407
408
409 def alignType10Phase1(dev):
410     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
411                          pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE)
412
413     dev.closePrint()
414
415
416 def alignType10Phase2(dev, values, pattern):
417     i, p = 0, ''.join([pcl.UEL, '\n'])
418
419     for x in values:
420         i += 1
421         if not x:
422             break
423         p = ''.join([p, pcl.ESC, '*o5W\x1a', chr(i), '\x00', chr(pattern), chr(x), '\n'])
424
425     p = ''.join([p, pcl.UEL])
426
427     dev.printData(p)
428     dev.closePrint()
429
430
431 def alignType10Phase3(dev):
432     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
433                          pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE_VERIFICATION)
434
435     dev.closePrint()
436
437
438 def align10and11and14Controls(pattern, align_type):
439     if align_type == ALIGN_TYPE_LIDIL_0_5_4:
440         if pattern == 1:
441             controls = { 'A' : (True, 23),
442                          'B' : (True, 9),
443                          'C' : (True, 9),
444                          'D' : (False, 0),
445                          'E' : (False, 0),
446                          'F' : (False, 0),
447                          'G' : (False, 0),
448                          'H' : (False, 0),}
449         elif pattern == 2: # K + color (ii)
450             controls = { 'A' : (True, 17),
451                          'B' : (True, 23),
452                          'C' : (True, 23),
453                          'D' : (True, 23),
454                          'E' : (True, 9),
455                          'F' : (True, 9),
456                          'G' : (True, 9),
457                          'H' : (True, 9),}
458
459         elif pattern == 3: # color + photo (iii)
460             controls = { 'A' : (True, 9),
461                          'B' : (True, 23),
462                          'C' : (True, 23),
463                          'D' : (True, 23),
464                          'E' : (True, 9),
465                          'F' : (True, 9),
466                          'G' : (True, 9),
467                          'H' : (True, 9),}
468
469     elif align_type == ALIGN_TYPE_LIDIL_DJ_D1600:
470         if pattern == 1:
471             controls = { 'A' : (True, 23),
472                          'B' : (True, 9),}
473         elif pattern == 2: # K + color (ii)
474             controls = { 'A' : (True, 23),
475                          'B' : (True, 11),
476                          'C' : (True, 23),
477                          'D' : (True, 23),
478                          'E' : (True, 11),
479                          'F' : (True, 11),
480                          'G' : (True, 11),
481                          'H' : (True, 9),
482                          'I' : (True, 9),}
483
484         elif pattern == 3: # color + photo (iii)
485             controls = { 'A' : (True, 9),
486                          'B' : (True, 23),
487                          'C' : (True, 23),
488                          'D' : (True, 23),
489                          'E' : (True, 9),
490                          'F' : (True, 9),
491                          'G' : (True, 9),
492                          'H' : (True, 9),
493                          'I' : (True, 9),}
494
495     else:
496         if pattern == 1:
497             controls = {'A' : (True, 23),
498                          'B' : (True, 9),
499                          'C' : (True, 9),
500                          'D' : (False, 0),
501                          'E' : (False, 0),
502                          'F' : (False, 0),
503                          'G' : (False, 0),
504                          'H' : (False, 0),}
505         elif pattern == 2:
506             controls = {'A' : (True, 23),
507                         'B' : (True, 17),
508                          'C' : (True, 23),
509                          'D' : (True, 23),
510                          'E' : (True, 9),
511                          'F' : (True, 9),
512                          'G' : (True, 9),
513                          'H' : (True, 9),}
514
515         elif pattern == 3:
516             controls = {'A' : (True, 23),
517                          'B' : (True, 9),
518                          'C' : (True, 23),
519                          'D' : (True, 23),
520                          'E' : (True, 9),
521                          'F' : (True, 9),
522                          'G' : (True, 9),
523                          'H' : (True, 9),}
524
525     return controls
526
527
528 def AlignType11(dev, loadpaper_ui, align_ui, invalidpen_ui):
529     pattern = alignType11SetPattern(dev)
530     if pattern is None:
531         invalidpen_ui()
532         return
533
534     state = 0
535     while state != -1:
536         if state == 0:
537             state = -1
538             ok = loadpaper_ui()
539             if ok:
540                 alignType11Phase1(dev)
541                 state = 1
542
543         elif state == 1:
544             values = align_ui(pattern, ALIGN_TYPE_LIDIL_0_5_4)
545             log.debug(values)
546             alignType11Phase2(dev, values, pattern, dev.pen_config)
547             state = 2
548
549         elif state == 2:
550             state = -1
551             ok = loadpaper_ui()
552             if ok:
553                 alignType11Phase3(dev)
554
555
556 def alignType11SetPattern(dev):
557     pattern = None
558     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
559     log.debug("Pen config=%d" % dev.pen_config)
560
561     if dev.pen_config in (AGENT_CONFIG_BLACK_ONLY, AGENT_CONFIG_COLOR_ONLY): # (i)
562         pattern = 1
563
564     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK: # (ii)
565         pattern = 2
566
567     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO: # (iii)
568         pattern = 3
569
570     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
571         return None
572
573     log.debug("Pattern=%d" % pattern)
574     return pattern
575
576
577 def alignType11Phase1(dev):
578     dev.printData(ldl.buildResetPacket())
579     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION))
580     dev.closePrint()
581
582
583 def alignType11Phase2(dev, values, pattern, pen_config):
584     active_colors = 0
585
586     if pen_config == AGENT_CONFIG_BLACK_ONLY:
587         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K
588         values = values[:3]
589
590     elif pen_config == AGENT_CONFIG_COLOR_ONLY:
591         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
592         values = values[:3]
593
594     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
595         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K | ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
596
597     elif pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
598         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR | ldl.COMMAND_SET_PEN_ALIGNMENT_3_PHOTO
599
600     log.debug("Active colors=0x%x Values=%s" % (active_colors, values))
601
602     dev.printData(ldl.buildSetPenAlignment3Packet(active_colors, values))
603     dev.closePrint()
604
605 def alignType11Phase3(dev):
606     dev.printData(ldl.buildResetPacket())
607     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION_VERIFY))
608     dev.closePrint()
609
610
611 def AlignType13(dev, loadpaper_ui, scanner_align_load_ui): # Auto AiO (Yellowtail)
612     ok = loadpaper_ui()
613     if ok:
614         alignType13Phase1(dev)
615         ok = scanner_align_load_ui()
616
617     return ok
618
619 def alignType13Phase1(dev):
620     dev.setPML(pml.OID_AUTO_ALIGNMENT, pml.AUTO_ALIGNMENT)
621     dev.closePML()
622
623 calibrationSession = 1
624
625 def dataModelHelper(dev, func, ui2):
626     data = status.StatusType10FetchUrl(func, "/Calibration/State")
627     if not data:
628         data = status.StatusType10FetchUrl(func, "/Calibration/State")
629
630     if not data:
631         log.debug("Unable to retrieve calibration state")
632         dev.close()
633         return 0
634
635     if "ParmsRequested" in data:
636         log.error("Restart device and start alignment")
637         dev.close()
638         return 1
639
640     if "404 Not Found" in data:
641         log.error("Device may not support Alignment")
642         dev.close()
643         return 1
644
645     if "Printing<" in data:
646         log.warn("Previous alignment job not completed")
647         dev.close()
648         return 1
649
650     data = status.StatusType10FetchUrl(func, "/DevMgmt/ConsumableConfigDyn.xml")
651     if "AlignmentMode" not in data:
652         log.error("Device may not support Alignment")
653         dev.close()
654         return 1
655
656     if "automatic" in data:
657         log.debug("Device supports automatic calibration")
658         status.StatusType10FetchUrl(func, "/Calibration/Session", "<cal:CalibrationState xmlns:cal=\\\"http://www.hp.com/schemas/imaging/con/cnx/markingagentcalibration/2009/04/08\\\" xmlns:dd=\\\"http://www.hp.com/schemas/imaging/con/dictionaries/1.0/\\\">Printing</cal:CalibrationState>")
659         dev.close()
660         return 0
661
662     if "semiAutomatic" in data:
663         log.debug("Device supports semiAutomatic calibration")
664         status.StatusType10FetchUrl(func, "/Calibration/Session", "<cal:CalibrationState xmlns:cal=\\\"http://www.hp.com/schemas/imaging/con/cnx/markingagentcalibration/2009/04/08\\\" xmlns:dd=\\\"http://www.hp.com/schemas/imaging/con/dictionaries/1.0/\\\">Printing</cal:CalibrationState>")
665         dev.close()
666         return ui2()
667
668     if "manual" in data:
669         log.debug("Device supports manual calibration")
670         data = status.StatusType10FetchUrl(func, "/Calibration/Session", "<cal:CalibrationState xmlns:cal=\\\"http://www.hp.com/schemas/imaging/con/cnx/markingagentcalibration/2009/04/08\\\" xmlns:dd=\\\"http://www.hp.com/schemas/imaging/con/dictionaries/1.0/\\\">Printing</cal:CalibrationState>")
671         import string
672         data = string.split(data, "/Jobs")[1]
673         data = string.split(data, "\r\n")[0]
674         data = "/Jobs" + data
675         data = status.StatusType10FetchUrl(func, data)
676         data = string.split(data, "Session/")[1]
677         data = string.split(data, "<")[0]
678         data = "/Calibration/Session/" + data + "/ManualSelectedPatterns.xml"
679         global calibrationSession
680         calibrationSession = data
681         dev.close()
682     return 0
683
684 def AlignType16Manual(dev, a, b, c, d, e, f, g, h, i):
685     log.debug("a=%s b=%s c=%s d=%s e=%s f=%s g=%s h=%s i=%s" % (a, b, c, d, e, f, g, h, i ))
686     data = status.StatusType10FetchUrl(func, "/Calibration/State")
687
688     if not data:
689         return 0
690
691     while "ParmsRequested" not in data:
692         if "CalibrationValid" in data:
693             return
694         data = status.StatusType10FetchUrl(func, "/Calibration/State")
695     data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- THIS DATA SUBJECT TO DISCLAIMER(S) INCLUDED WITH THE PRODUCT OF ORIGIN. -->\n<ManualSelectedPatterns xmlns=\"http://www.hp.com/schemas/imaging/con/cnx/markingagentcalibration/2009/04/08\" xmlns:locid=\"http://www.hp.com/schemas/imaging/con/ledm/localizationids/2007/10/31/\" xmlns:psdyn=\"http://www.hp.com/schemas/imaging/con/ledm/productstatdyn/2007/10/31\"><SelectedPattern><Identifier><Id>1</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>2</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>3</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>4</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>5</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>6</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>7</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>8</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern><SelectedPattern><Identifier><Id>9</Id></Identifier><Choice><Identifier><Id>%s</Id></Identifier></Choice></SelectedPattern></ManualSelectedPattern>" % ( a, b, c, d, e, f, g, h, i )
696     data = "PUT %s HTTP/1.1\r\nHost: localhost\r\nUser-Agent: hp\r\nAccept: text/plain\r\nAccept-Language: en-us,en\r\nAccept-Charset:utf-8\r\nContent-Type: text/xml\r\nContent-Length: %s\r\n\r\n" % ( calibrationSession, len(data)) + data
697     data = status.StatusType10FetchUrl(func, calibrationSession, data)
698
699 def AlignType15(dev, loadpaper_ui, ui2):
700     if not loadpaper_ui():
701         return
702     return dataModelHelper(dev, dev.getEWSUrl_LEDM, ui2)
703
704 def AlignType15Phase1(dev, ui2):
705     return dataModelHelper(dev, dev.getEWSUrl_LEDM, ui2)
706
707 #AlignType 17 is LEDM via FF/CC/0 USB channel
708 def AlignType17(dev, loadpaper_ui, ui2):
709     if not loadpaper_ui():
710         return
711     return dataModelHelper(dev, dev.getUrl_LEDM, ui2)
712
713 def AlignType17Phase1(dev, ui2):
714     return dataModelHelper(dev, dev.getUrl_LEDM, ui2)
715
716 def AlignType16(dev, loadpaper_ui, align_ui):
717     if not loadpaper_ui():
718         return
719     dataModelHelper(dev, dev.getEWSUrl_LEDM, align_ui)
720     state, a, b, c, d, e, f, g, h, i = 0, 6, 6, 3, 3, 6, 6, 6, 6, 6
721     ok = False
722     while state != -1:
723         if state == 0:
724             state = -1
725             ok, a = align_ui('A', 'v', 'kc', 3, 23)
726             if ok:
727                 state = 1
728
729         elif state == 1:
730             state = -1
731             ok, b = align_ui('B', 'h', 'kc', 3, 11)
732             if ok:
733                 state = 2
734
735         elif state == 2:
736             state = -1
737             ok, c = align_ui('C', 'v', 'k', 3, 23)
738             if ok:
739                 state = 3
740
741         elif state == 3:
742             state = -1
743             ok, d = align_ui('D', 'v', 'c', 3, 23)
744             if ok:
745                 state = 4
746
747         elif state == 4:
748             state = -1
749             ok, e = align_ui('E', 'h', 'k', 3, 11)
750             if ok:
751                 state = 5
752
753         elif state == 5:
754             state = -1
755             ok, e = align_ui('F', 'h', 'k', 3, 11)
756             if ok:
757                 state = 6
758
759         elif state == 6:
760             state = -1
761             ok, e = align_ui('G', 'h', 'k', 3, 11)
762             if ok:
763                 state = 7
764
765         elif state == 7:
766             state = -1
767             ok, e = align_ui('H', 'h', 'k', 3, 11)
768             if ok:
769                 state = 8
770
771         elif state == 8:
772             state = -1
773             ok, e = align_ui('I', 'h', 'k', 3, 11)
774             if ok:
775                 state = 9
776
777         elif state == 9:
778             state = -1
779
780     AlignType16Manual(dev, a, b, c, d, e, f, g, h, i)
781
782     return ok
783
784 def AlignType16Phase1(dev, a, b, c, d, e, f, g, h, i):
785     AlignType16Manual(dev, a, b, c, d, e, f, g, h, i)
786
787 def AlignType14(dev, loadpaper_ui, align_ui, invalidpen_ui):
788     pattern = alignType14SetPattern(dev)
789     if pattern is None:
790         invalidpen_ui()
791         return
792
793     state = 0
794     while state != -1:
795         if state == 0:
796             state = -1
797             ok = loadpaper_ui()
798             if ok:
799                 alignType14Phase1(dev)
800                 state = 1
801
802         elif state == 1:
803             values = align_ui(pattern, ALIGN_TYPE_LIDIL_DJ_D1600)
804             log.debug(values)
805             alignType14Phase2(dev, values, pattern, dev.pen_config)
806             state = 2
807
808         elif state == 2:
809             state = -1
810             ok = loadpaper_ui()
811             if ok:
812                 alignType14Phase3(dev)
813
814
815 def alignType14SetPattern(dev):
816     pattern = None
817     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
818     log.debug("Pen config=%d" % dev.pen_config)
819
820     if dev.pen_config in (AGENT_CONFIG_BLACK_ONLY, AGENT_CONFIG_COLOR_ONLY): # (i)
821         pattern = 1
822
823     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK: # (ii)
824         pattern = 2
825
826     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO: # (iii)
827         pattern = 3
828
829     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
830         return None
831
832     log.debug("Pattern=%d" % pattern)
833     return pattern
834
835
836 def alignType14Phase1(dev):
837     dev.printData(ldl.buildResetPacket())
838     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION))
839     dev.closePrint()
840
841
842 def alignType14Phase2(dev, values, pattern, pen_config):
843     active_colors = 0
844
845     if pen_config == AGENT_CONFIG_BLACK_ONLY:
846         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K
847         values = values[:2]
848
849     elif pen_config == AGENT_CONFIG_COLOR_ONLY:
850         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
851         values = values[:2]
852
853     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
854         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K | ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
855
856     elif pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
857         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR | ldl.COMMAND_SET_PEN_ALIGNMENT_3_PHOTO
858
859     log.debug("Active colors=0x%x Values=%s" % (active_colors, values))
860
861     dev.printData(ldl.buildSetPenAlignment3Packet(active_colors, values))
862     dev.closePrint()
863
864 def alignType14Phase3(dev):
865     dev.printData(ldl.buildResetPacket())
866     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION_VERIFY))
867     dev.closePrint()
868
869
870 def alignType2Phase1(dev): # Type 2 (8xx)
871     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
872     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
873     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
874     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
875     dev.closePrint()
876     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align1_8xx.pcl.gz'))
877
878
879 def alignType2Phase2(dev, a, b, c, d): # (8xx)
880     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, (a - 6) * 12)
881     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, (b - 6) * 12)
882     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, (c - 3) * 12)
883     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, (d - 3) * 12)
884     dev.writeEmbeddedPML(pml.OID_MARKING_AGENTS_INITIALIZED, 3)
885     dev.closePrint()
886     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align2_8xx.pcl.gz'))
887
888
889 def alignType3Phase1(dev): # Type 3 (9xx)
890     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
891     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
892     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
893     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
894     dev.closePrint()
895     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align1_9xx.pcl.gz'))
896
897
898 def alignType3Phase2(dev, a, b, c, d): # Type 3 (9xx)
899     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, (a - 6) * 12)
900     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, (6 - b) * 12)
901     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, (6 - c) * 12)
902     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, (6 - d) * 6)
903     dev.closePrint()
904
905 def alignType3Phase3(dev): # Type 3 (9xx)
906     dev.closePrint()
907     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align3_9xx.pcl.gz'))
908
909
910 def alignType3Phase4(dev, zca): # Type 3 (9xx)
911     dev.writeEmbeddedPML(pml.OID_MARKING_AGENTS_INITIALIZED, 3)
912     dev.closePrint()
913     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align2_9xx.pcl.gz'))
914
915
916 def alignType4Phase1(dev): # Type 4 (xBow/LIDIL 0.3.8)
917     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_RESUME_NORMAL_OPERATION))
918
919     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
920         return
921
922     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
923         ldl_file = 'cbbcal.ldl.gz'
924
925     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
926         ldl_file = 'cbccal.ldl.gz'
927
928     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
929         ldl_file = 'cb2pcal.ldl.gz'
930
931     dev.printData(ldl.buildSetPrinterAlignmentPacket(0, 0, 0, 0))
932     dev.closePrint()
933     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', ldl_file))
934
935
936 def alignType4Phase2(dev, a, b, c, d, e): # Type 4 (LIDIL 0.3.8)
937     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d" % (a, b, c, d, e))
938
939     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
940         return
941
942     # ZCA
943     zca = (7 - a) * -48
944     dev.printData(ldl.buildZCAPacket(zca))
945
946     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
947         k_bidi = (6 - b) * 2
948         dev.printData(ldl.buildSetPrinterAlignmentPacket(k_bidi, 0, 0, 0))
949
950     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
951         cmy_bidi = (6 - b) * 2
952         dev.printData(ldl.buildSetPrinterAlignmentPacket(0, 0, 0, cmy_bidi))
953
954     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
955         vert = (9 - b) * 2
956         hort = (9 - c) * -2
957         k_bidi = (6 - d) * 2
958         cmy_bidi = (6 - e) * 2
959
960         dev.printData(ldl.buildSetPrinterAlignmentPacket(k_bidi, hort, vert, cmy_bidi))
961
962     # Set alignment
963     dev.printData(ldl.buildSetPensAlignedPacket())
964     dev.closePrint()
965
966
967 def alignType4Phase3(dev): # Type 4 (LIDIL 0.3.8)
968     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
969         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', 'cb2pcal_done.ldl.gz'))
970
971
972 def alignType5Phase1(dev): # Type 5 (xBow+/LIDIL 0.4.3)
973     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_RESUME_NORMAL_OPERATION))
974
975     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
976         return
977
978     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
979         ldl_file = 'cbbcal.ldl.gz'
980
981     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
982         ldl_file = 'cbpcal.ldl.gz'
983
984     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
985         ldl_file = 'cbccal.ldl.gz'
986
987     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
988         ldl_file = 'cb2pcal.ldl.gz'
989
990     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
991         ldl_file = 'cbcpcal.ldl.gz'
992
993     dev.printData(ldl.buildZCAPacket(0))
994     dev.printData(ldl.buildColorHortPacket(0))
995     dev.printData(ldl.buildColorVertPacket(0))
996     dev.printData(ldl.buildBlackVertPacket(0))
997     dev.printData(ldl.buildBlackHortPacket(0))
998     dev.printData(ldl.buildBlackBidiPacket(0))
999     dev.printData(ldl.buildColorBidiPacket(0))
1000     dev.printData(ldl.buildPhotoHuePacket(0))
1001     dev.printData(ldl.buildColorHuePacket(0))
1002     dev.closePrint()
1003
1004     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', ldl_file))
1005
1006
1007 def alignType5Phase2(dev, a, b, c, d, e, f, g): # Type 5 (xBow+/LIDIL 0.4.3)
1008     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d, F=%d, G=%d" % (a, b, c, d, e, f, g))
1009
1010     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
1011         return
1012
1013     # ZCA
1014     zca = (7 - a) * -48
1015     dev.printData(ldl.buildZCAPacket(zca))
1016
1017     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
1018         k_bidi = (6 - b) * 2
1019         dev.printData(ldl.buildBlackBidiPacket(k_bidi))
1020
1021     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
1022         kcm_bidi = (6 - b) * 2
1023         dev.printData(ldl.buildPhotoBidiPacket(kcm_bidi))
1024
1025     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
1026         cmy_bidi = (6 - b) * 2
1027         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
1028
1029     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
1030         vert = (9 - b) * 2
1031         hort = (9 - c) * -2
1032         k_bidi = (6 - d) * 2
1033         cmy_bidi = (6 - e) * 2
1034
1035         dev.printData(ldl.buildColorHortPacket(0))
1036         dev.printData(ldl.buildColorVertPacket(0))
1037         dev.printData(ldl.buildBlackVertPacket(vert))
1038         dev.printData(ldl.buildBlackHortPacket(hort))
1039         dev.printData(ldl.buildBlackBidiPacket(k_bidi))
1040         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
1041
1042     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
1043         vert = (9 - b) * 2
1044         hort = (9 - c) * -2
1045         cmy_bidi = (6 - d) * 2
1046         kcm_bidi = (6 - e) * 2
1047
1048         photo_adj = colorcal.PHOTO_ALIGN_TABLE[f][g]
1049         color_adj = colorcal.COLOR_ALIGN_TABLE[f][g]
1050
1051         dev.printData(ldl.buildPhotoHortPacket(hort))
1052         dev.printData(ldl.buildPhotoVertPacket(vert))
1053         dev.printData(ldl.buildColorHortPacket(0))
1054         dev.printData(ldl.buildColorVertPacket(0))
1055         dev.printData(ldl.buildPhotoBidiPacket(kcm_bidi))
1056         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
1057         dev.printData(ldl.buildPhotoHuePacket(photo_adj))
1058         dev.printData(ldl.buildColorHuePacket(color_adj))
1059
1060     # Set alignment
1061     dev.printData(ldl.buildSetPensAlignedPacket())
1062     dev.closePrint()
1063
1064
1065 def alignType5Phase3(dev): # Type 5 (xBow+/LIDIL 0.4.3)
1066     dev.closePrint()
1067     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
1068         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', "cb2pcal_done.ldl.gz"))
1069
1070     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
1071         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', "cbccal_done.ldl.gz"))
1072
1073
1074 def alignType6Phase1(dev): # Type 6 (xBow AiO)
1075     dev.printData(ldl.buildPrintInternalPagePacket())
1076     dev.closePrint()
1077
1078 def alignType7Phase1(dev): # Type 7 (xBow VIP)
1079     # Zero out all alignment values
1080     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
1081
1082     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
1083     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
1084     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
1085
1086     dev.writeEmbeddedPML(pml.OID_AGENT3_VERTICAL_ALIGNMENT, 0)
1087     dev.writeEmbeddedPML(pml.OID_AGENT3_HORIZONTAL_ALIGNMENT, 0)
1088     dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, 0)
1089
1090     dev.writeEmbeddedPML(pml.OID_ZCA, 0)
1091
1092     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
1093         return
1094
1095     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
1096         pcl_file = 'crbcal.pcl.gz'
1097
1098     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
1099         pcl_file = 'crpcal.pcl.gz'
1100
1101     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
1102         pcl_file = 'crccal.pcl.gz'
1103
1104     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
1105         pcl_file = 'crcbcal.pcl.gz'
1106
1107     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
1108         pcl_file = 'crcpcal.pcl.gz'
1109
1110     dev.closePrint()
1111     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', pcl_file))
1112
1113
1114 def alignType7Phase2(dev, a, b, c, d, e, f, g): # Type 7 (xBow VIP)
1115     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d, F=%d, G=%d" % (a, b, c, d, e, f, g))
1116
1117     # ZCA
1118     zca = (7 - a) * -12
1119     dev.writeEmbeddedPML(pml.OID_ZCA, zca)
1120
1121     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
1122         k_bidi = (6 - b) * 6
1123         dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, k_bidi)
1124
1125     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
1126         kcm_bidi = (6 - b) * 6
1127         dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, kcm_bidi)
1128
1129     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
1130         cmy_bidi = (6 - b) * 6
1131         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
1132
1133     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
1134         vert = (9 - b) * 6
1135         hort = (9 - c) * -6
1136         k_bidi = (6 - d) * 6
1137         cmy_bidi = (6 - e) * 6
1138
1139         dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, k_bidi)
1140         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
1141         dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, hort)
1142         dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, vert)
1143
1144     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
1145         vert = (9 - b) * 6
1146         hort = (9 - c) * -6
1147         cmy_bidi = (6 - d) * 6
1148         kcm_bidi = (6 - e) * 6
1149
1150         photo_adj = colorcal.PHOTO_ALIGN_TABLE[f][g]
1151         color_adj = colorcal.COLOR_ALIGN_TABLE[f][g]
1152
1153         x = (color_adj << 8) + photo_adj
1154
1155         dev.writeEmbeddedPML(pml.OID_COLOR_CALIBRATION_SELECTION, x)
1156
1157         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
1158         dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, kcm_bidi)
1159         dev.writeEmbeddedPML(pml.OID_AGENT3_HORIZONTAL_ALIGNMENT, hort)
1160         dev.writeEmbeddedPML(pml.OID_AGENT3_VERTICAL_ALIGNMENT, vert)
1161
1162     dev.closePrint()
1163
1164 def alignType7Phase3(dev): # Type 7 (xBow VIP)
1165     dev.closePrint()
1166     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', "crcaldone.pcl.gz"))
1167
1168
1169 def alignType8Phase1(dev): # 450
1170     pens = dev.getStatusFromDeviceID()['agents']
1171     pen_types = [pens[x]['type'] for x in range(len(pens))]
1172
1173     if AGENT_TYPE_KCM in pen_types:
1174         f, num_inks = 'align6_450.pcl.gz', 6
1175     else:
1176         f, num_inks = 'align4_450.pcl.gz', 4
1177
1178     dev.closePrint()
1179     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', f))
1180
1181     return num_inks
1182
1183
1184 def alignType8Phase2(dev, num_inks, a, b, c, d): # 450
1185     align_values1 = {1 : '\x00\x00\x18',
1186                       2 : '\x00\x00\x12',
1187                       3 : '\x00\x00\x0c',
1188                       4 : '\x00\x00\x06',
1189                       5 : '\x00\x00\x00',
1190                       6 : '\x01\x00\x06',
1191                       7 : '\x01\x00\x0c',
1192                       8 : '\x01\x00\x12',
1193                       9 : '\x01\x00\x18',
1194                     }
1195
1196     align_values2 = {1 : '\x00\x00\x12',
1197                       2 : '\x00\x00\x0c',
1198                       3 : '\x00\x00\x06',
1199                       4 : '\x00\x00\x00',
1200                       5 : '\x01\x00\x06',
1201                       6 : '\x01\x00\x0c',
1202                       7 : '\x01\x00\x12',
1203                       8 : '\x01\x00\x18',
1204                       9 : '\x01\x00\x1e',
1205                     }
1206
1207     align_values3 = {1 : '\x00\x00\x24',
1208                       2 : '\x00\x00\x18',
1209                       3 : '\x00\x00\x12',
1210                       4 : '\x00\x00\x06',
1211                       5 : '\x00\x00\x00',
1212                       6 : '\x01\x00\x06',
1213                       7 : '\x01\x00\x12',
1214                       8 : '\x01\x00\x18',
1215                       9 : '\x01\x00\x24',
1216                     }
1217
1218     if num_inks == 4:
1219         s = ''.join([pcl.UEL,
1220               '@PJL ENTER LANGUAGE=PCL3GUI\n',
1221               pcl.RESET,
1222               pcl.ESC, '*o5W\x1a\x01', align_values1[a],
1223               pcl.ESC, '*o5W\x1a\x02', align_values2[a],
1224               pcl.ESC, '*o5W\x1a\x03', align_values1[b],
1225               pcl.ESC, '*o5W\x1a\x04', align_values1[b],
1226               pcl.ESC, '*o5W\x1a\x08', align_values1[c],
1227               pcl.ESC, '*o5W\x1a\x07', align_values1[d],
1228               pcl.RESET,
1229               pcl.UEL])
1230
1231     else: # 6
1232         s = ''.join([pcl.UEL,
1233               '@PJL ENTER LANGUAGE=PCL3GUI\n',
1234               pcl.RESET,
1235               pcl.ESC, '*o5W\x1a\x05', align_values1[a],
1236               pcl.ESC, '*o5W\x1a\x06', align_values3[a],
1237               pcl.ESC, '*o5W\x1a\x03', align_values1[b],
1238               pcl.ESC, '*o5W\x1a\x04', align_values1[b],
1239               pcl.ESC, '*o5W\x1a\x0a', align_values1[c],
1240               pcl.ESC, '*o5W\x1a\x09', align_values1[d],
1241               pcl.RESET,
1242               pcl.UEL])
1243
1244     dev.printData(s)
1245     dev.closePrint()
1246
1247
1248 def AlignType12(dev, loadpaper_ui):
1249     if loadpaper_ui():
1250         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE)
1251         dev.closePML()
1252
1253 # ********************** Clean **********************
1254
1255
1256 def cleaning(dev, clean_type, level1, level2, level3,
1257               loadpaper_ui, dlg1, dlg2, dlg3, wait_ui):
1258
1259     state = 0
1260
1261     while state != -1:
1262         if state == 0: # Initial level1 print
1263             state = 1
1264             if clean_type == CLEAN_TYPE_PCL_WITH_PRINTOUT:
1265                 ok = loadpaper_ui()
1266                 if not ok:
1267                     state = -1
1268
1269         elif state == 1: # Do level 1
1270             level1(dev)
1271             state = 2
1272
1273         elif state == 2: # Load plain paper
1274             state = -1
1275             ok = loadpaper_ui()
1276             if ok:
1277                 state = 3
1278
1279         elif state == 3: # Print test page
1280             state = 4
1281             print_clean_test_page(dev)
1282
1283         elif state == 4: # Need level 2?
1284             state = -1
1285             ok = dlg1()
1286             if ok:
1287                 state = 5
1288
1289         elif state == 5: # Do level 2
1290             level2(dev)
1291             state = 6
1292
1293         elif state == 6: # Load plain paper
1294             state = -1
1295             ok = loadpaper_ui()
1296             if ok:
1297                 state = 7
1298
1299         elif state == 7: # Print test page
1300             state = 8
1301             print_clean_test_page(dev)
1302
1303         elif state == 8: # Need level 3?
1304             state = -1
1305             ok = dlg2()
1306             if ok:
1307                 state = 9
1308
1309         elif state == 9: # Do level 3
1310             level3(dev)
1311             state = 10
1312
1313         elif state == 10: # Load plain paper
1314             state = -1
1315             ok = loadpaper_ui()
1316             if ok:
1317                 state = 11
1318
1319         elif state == 11: # Print test page
1320             state = 12
1321             print_clean_test_page(dev)
1322
1323         elif state == 12:
1324             state = -1
1325             dlg3()
1326
1327     return ok
1328
1329
1330 def print_clean_test_page(dev):
1331     dev.closePrint()
1332     dev.printGzipFile(os.path.join(prop.home_dir, 'data',
1333                       'ps', 'clean_page.pdf.gz'), raw=False)
1334
1335 def cleanType1(dev): # PCL, Level 1
1336     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_CLEAN)
1337     dev.closePrint()
1338
1339 def primeType1(dev): # PCL, Level 2
1340     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_PRIME)
1341     dev.closePrint()
1342
1343 def wipeAndSpitType1(dev): # PCL, Level 3
1344     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_WIPE_AND_SPIT)
1345     dev.closePrint()
1346
1347 def cleanType2(dev): # LIDIL, Level 1
1348     dev.printData(ldl.buildResetPacket())
1349     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
1350                                        ldl.COMMAND_HANDLE_PEN,
1351                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL1))
1352     dev.closePrint()
1353
1354 def primeType2(dev): # LIDIL, Level 2
1355     dev.printData(ldl.buildResetPacket())
1356     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
1357                                        ldl.COMMAND_HANDLE_PEN,
1358                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL2))
1359     dev.closePrint()
1360
1361 def wipeAndSpitType2(dev): # LIDIL, Level 3
1362     dev.printData(ldl.buildResetPacket())
1363     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
1364                                        ldl.COMMAND_HANDLE_PEN,
1365                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL3))
1366     dev.closePrint()
1367
1368
1369 # ********************** Color Cal **********************
1370
1371
1372 def colorCalType1(dev, loadpaper_ui, colorcal_ui, photopenreq_ui): # 450
1373     value, state = 4, 0
1374     ok = False
1375     while state != -1:
1376
1377         if state == 0:
1378             if colorCalType1PenCheck(dev):
1379                 state = 1
1380             else:
1381                 state = 100
1382
1383         elif state == 1:
1384             state = -1
1385             ok = loadpaper_ui()
1386             if ok:
1387                 colorCalType1Phase1(dev)
1388                 state = 2
1389
1390         elif state == 2:
1391             state = -1
1392             ok, value = colorcal_ui()
1393             if ok:
1394                 state = 3
1395
1396         elif state == 3:
1397             colorCalType1Phase2(dev, value)
1398             state = -1
1399
1400         elif state == 100:
1401             ok = False
1402             photopenreq_ui()
1403             state = -1
1404
1405     return ok
1406
1407
1408 def colorCalType1PenCheck(dev): # 450
1409     pens = dev.getStatusFromDeviceID()['agents']
1410     pen_types = [pens[x]['type'] for x in range(len(pens))]
1411
1412     if AGENT_TYPE_KCM in pen_types:
1413         return True
1414
1415     else:
1416         log.error("Cannot perform color calibration with no photo pen installed.")
1417         return False
1418
1419
1420 def colorCalType1Phase1(dev): # 450
1421     dev.closePrint()
1422     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'colorcal1_450.pcl.gz'))
1423
1424
1425 def colorCalType1Phase2(dev, value): # 450
1426     color_cal = {1 : ('\x0f\x3c', '\x17\x0c'),
1427                   2 : ('\x10\xcc', '\x15\x7c'),
1428                   3 : ('\x12\x5c', '\x13\xec'),
1429                   4 : ('\x13\xec', '\x12\x5c'),
1430                   5 : ('\x15\x7c', '\x10\xcc'),
1431                   6 : ('\x17\x0c', '\x0f\x3c'),
1432                   7 : ('\x18\x9c', '\x0d\xac'),
1433                 }
1434
1435     s = ''.join([pcl.UEL,
1436                   '@PJL ENTER LANGUAGE=PCL3GUI\n',
1437                   pcl.RESET,
1438                   pcl.ESC, '*o5W\x1a\x0c\x00', color_cal[value][0],
1439                   pcl.ESC, '*o5W\x1a\x0b\x00', color_cal[value][1],
1440                   pcl.RESET,
1441                   pcl.UEL])
1442
1443     dev.printData(s)
1444     dev.closePrint()
1445
1446 #
1447 # COLOR CAL TYPE 2
1448 #
1449
1450 def colorCalType2(dev, loadpaper_ui, colorcal_ui, photopenreq_ui):
1451     value, state = 4, 0
1452     ok = True
1453     while state != -1:
1454
1455         if state == 0:
1456             if colorCalType2PenCheck(dev):
1457                 state = 1
1458             else:
1459                 state = 100
1460
1461         elif state == 1:
1462             state = -1
1463             ok = loadpaper_ui()
1464             if ok:
1465                 colorCalType2Phase1(dev)
1466                 state = 2
1467
1468         elif state == 2:
1469             state = -1
1470             ok, value = colorcal_ui()
1471             if ok:
1472                 state = 3
1473
1474         elif state == 3:
1475             colorCalType2Phase2(dev, value)
1476             state = -1
1477
1478         elif state == 100:
1479             photopenreq_ui()
1480             ok = False
1481             state = -1
1482
1483     return ok
1484
1485 def colorCalType2PenCheck(dev):
1486     pens = dev.getStatusFromDeviceID()['agents']
1487     pen_types = [pens[x]['type'] for x in range(len(pens))]
1488
1489     if not AGENT_TYPE_NONE in pen_types:
1490         return True
1491
1492     else:
1493         log.error("Cannot perform color calibration with pens missing.")
1494         return False
1495
1496 def colorCalType2Phase1(dev):
1497     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
1498                          pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
1499
1500     dev.closePrint()
1501
1502
1503 def colorCalType2Phase2(dev, value):
1504     c = colorcal.COLOR_CAL_TABLE
1505     p = ''.join(['\x1b&b19WPML \x04\x00\x06\x01\x04\x01\x05\x01\t\x08\x04',
1506                    chr(c[value*4]+100), chr(c[value*4+1]+100),
1507                    chr(c[value*4+2]+100), chr(c[value*4+3]+100),
1508                    '\x1b%-12345X'])
1509
1510     dev.printData(p)
1511     dev.closePrint()
1512
1513
1514 #
1515 # COLOR CAL TYPE 3
1516 #
1517
1518 def colorCalType3(dev, loadpaper_ui, colorcal_ui, photopenreq_ui):
1519     value, state = 4, 0
1520     ok = True
1521     while state != -1:
1522
1523         if state == 0:
1524             if colorCalType3PenCheck(dev):
1525                 state = 1
1526             else:
1527                 state = 100
1528
1529         elif state == 1:
1530             state = -1
1531             ok = loadpaper_ui()
1532             if ok:
1533                 colorCalType3Phase1(dev)
1534                 state = 2
1535
1536         elif state == 2:
1537             state = -1
1538             ok, valueA = colorcal_ui('A', 21)
1539             if ok:
1540                 state = 3
1541
1542         elif state == 3:
1543             state = -1
1544             ok, valueB = colorcal_ui('B', 21)
1545             if ok:
1546                 state = 4
1547
1548         elif state == 4:
1549             colorCalType3Phase2(dev, valueA, valueB)
1550             state = -1
1551
1552         elif state == 100:
1553             photopenreq_ui()
1554             ok = False
1555             state = -1
1556
1557     return ok
1558
1559 def colorCalType3PenCheck(dev):
1560     pens = dev.getStatusFromDeviceID()['agents']
1561     pen_types = [pens[x]['type'] for x in range(len(pens))]
1562
1563     if AGENT_TYPE_KCM in pen_types or \
1564       AGENT_TYPE_BLUE in pen_types:
1565         return True
1566
1567     else:
1568         log.error("Cannot perform color calibration with no photo (or photo blue) pen installed.")
1569         return False
1570
1571
1572 def colorCalType3Phase1(dev):
1573     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
1574                          pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
1575     dev.closePrint()
1576
1577 def colorCalType3Phase2(dev, A, B):
1578     photo_adj = colorcal.PHOTO_ALIGN_TABLE[A-1][B-1]
1579     color_adj = colorcal.COLOR_ALIGN_TABLE[A-1][B-1]
1580     adj_value = (color_adj << 8L) + photo_adj
1581
1582     dev.writeEmbeddedPML(pml.OID_COLOR_CALIBRATION_SELECTION, adj_value)
1583     dev.closePrint()
1584
1585 def colorCalType4(dev, loadpaper_ui, colorcal_ui, wait_ui):
1586     state = 0
1587     ok = True
1588
1589     while state != -1:
1590         if state == 0:
1591             state = -1
1592             ok = loadpaper_ui()
1593             if ok:
1594                 colorCalType4Phase1(dev)
1595                 state = 2
1596
1597         elif state == 2:
1598             state = -1
1599             #wait_ui(90)
1600             ok, values = colorcal_ui()
1601             if ok:
1602                 state = 3
1603
1604         elif state == 3:
1605             colorCalType4Phase2(dev, values)
1606             #wait_ui(5)
1607             state = 4
1608
1609         elif state == 4:
1610             state = -1
1611             ok = loadpaper_ui()
1612             if ok:
1613                 colorCalType4Phase3(dev)
1614                 state = -1
1615
1616     return ok
1617
1618
1619 def colorCalType4Phase1(dev):
1620     dev.setPML(pml.OID_PRINT_INTERNAL_PAGE,
1621               pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
1622
1623     dev.closePML()
1624
1625
1626 def colorCalType4AdjValue(value):
1627     if value >= 100:
1628         return 200
1629     return value+100
1630
1631
1632 def colorCalType4Phase2(dev, values):
1633     if -1 in values:
1634         Cadj, Madj, Yadj, cadj, madj, kadj = 244, 244, 244, 244, 244, 244
1635     else:
1636         sel1, sel2, sel3, sel4 = values
1637         tmp1 = colorcal.TYPE_4_C_TABLE[sel1][sel2]
1638         tmp2 = colorcal.TYPE_4_LC_TABLE[sel3][sel4]
1639
1640         Cadj = colorCalType4AdjValue(tmp1)
1641         cadj = colorCalType4AdjValue(tmp1+tmp2)
1642
1643         tmp1 = colorcal.TYPE_4_M_TABLE[sel1][sel2]
1644         tmp2 = colorcal.TYPE_4_LM_TABLE[sel3][sel4]
1645
1646         Madj = colorCalType4AdjValue(tmp1)
1647         madj = colorCalType4AdjValue(tmp1+tmp2)
1648
1649         Yadj = colorCalType4AdjValue(colorcal.TYPE_4_Y_TABLE[sel1][sel2])
1650         kadj = colorCalType4AdjValue(0)
1651
1652     log.debug("C=%d, M=%d, Y=%d, c=%d, m=%d, k=%d\n" % (Cadj, Madj, Yadj, cadj, madj, kadj))
1653
1654     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_1,
1655                             kadj)
1656
1657     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_2,
1658                             Cadj)
1659
1660     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_3,
1661                             Madj)
1662
1663     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_4,
1664                             Yadj)
1665
1666     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_5,
1667                             cadj)
1668
1669     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_6,
1670                             madj)
1671
1672     dev.closePML()
1673
1674
1675 def colorCalType4Phase3(dev):
1676     dev.setPML(pml.OID_PRINT_INTERNAL_PAGE,
1677                          pml.PRINT_INTERNAL_PAGE_COLOR_PALETTE_CMYK_PAGE)
1678
1679     dev.closePML()
1680
1681
1682 def colorCalType5(dev, loadpaper_ui):
1683     if loadpaper_ui():
1684         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 20;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
1685         dev.closePrint()
1686
1687
1688 def colorCalType6(dev, loadpaper_ui):
1689     if loadpaper_ui():
1690         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
1691         dev.closePML()
1692
1693 def colorCalType7(dev, loadpaper_ui):
1694     if loadpaper_ui():
1695         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_AUTOMATIC_COLOR_CALIBRATION)
1696         dev.closePML()
1697
1698 # ********************** LF Cal **********************
1699
1700 def linefeedCalType1(dev, loadpaper_ui):
1701     if loadpaper_ui():
1702         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 3;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
1703         dev.closePrint()
1704
1705 def linefeedCalType2(dev, loadpaper_ui):
1706     if loadpaper_ui():
1707         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_LINEFEED_CALIBRATION)
1708         dev.closePML()
1709
1710
1711 # ********************** PQ Diag **********************
1712
1713 def printQualityDiagType1(dev, loadpaper_ui):
1714     if loadpaper_ui():
1715         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 14;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
1716         dev.closePrint()
1717
1718 def printQualityDiagType2(dev, loadpaper_ui):
1719     if loadpaper_ui():
1720         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_PRINT_QUALITY_DIAGNOSTIC)
1721         dev.closePML()