home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / hplip / base / maint.py < prev    next >
Encoding:
Python Source  |  2007-04-04  |  41.5 KB  |  1,409 lines

  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
  20. #
  21.  
  22. # Local
  23. from g import *
  24. from codes import *
  25. import status, pml
  26. from prnt import pcl, ldl, colorcal
  27.  
  28. # ********************** Align **********************
  29.  
  30. def AlignType1(dev, loadpaper_ui): # Auto VIP
  31.     ok = loadpaper_ui()
  32.     if ok:
  33.         dev.writeEmbeddedPML(pml.OID_AUTO_ALIGNMENT,
  34.                              pml.AUTO_ALIGNMENT, style=0, 
  35.                              direct=False)
  36.         dev.closePrint()
  37.  
  38.     return ok
  39.  
  40.  
  41. def AlignType2(dev, loadpaper_ui, align_ui, bothpens_ui): # 8xx
  42.     state, a, b, c, d = 0, 6, 6, 3, 3
  43.     ok = False
  44.     while state != -1:
  45.         if state == 0:
  46.             state = 1
  47.             pens = dev.getStatusFromDeviceID()['agents']
  48.             pen_types = [pens[x] for x in range(len(pens))]
  49.             if AGENT_TYPE_NONE in pen_types:
  50.                 log.error("Cannot perform alignment with 0 or 1 pen installed.")
  51.                 state = 100
  52.  
  53.         elif state == 1:
  54.             state = -1
  55.             ok = loadpaper_ui()
  56.             if ok:
  57.                 state = 2
  58.  
  59.         elif state == 2:
  60.             state = -1
  61.             alignType2Phase1(dev)
  62.             ok, a = align_ui('A', 'h', 'kc', 2, 11)
  63.             if ok:
  64.                 state = 3
  65.  
  66.         elif state == 3:
  67.             state = -1
  68.             ok, b = align_ui('B', 'v', 'kc', 2, 11)
  69.             if ok:
  70.                 state = 4
  71.  
  72.         elif state == 4:
  73.             state = -1
  74.             ok, c = align_ui('C', 'v', 'kc', 2, 5)
  75.             if ok:
  76.                 state = 5
  77.  
  78.         elif state == 5:
  79.             state = -1
  80.             ok, d = align_ui('D', 'v', 'c', 2, 5)
  81.             if ok:
  82.                 state = 6
  83.  
  84.         elif state == 6:
  85.             ok = loadpaper_ui()
  86.             if ok:
  87.                 alignType2Phase2(dev, a, b, c, d)
  88.             state = -1
  89.  
  90.         elif state == 100:
  91.             ok = False
  92.             bothpens_ui()
  93.             state = -1
  94.  
  95.     return ok
  96.  
  97.  
  98.  
  99. def AlignType3(dev, loadpaper_ui, align_ui, paperedge_ui, align_type): # 9xx
  100.     state, a, b, c, d, zca = 0, 6, 6, 3, 3, 6
  101.     ok = False
  102.     while state != -1:
  103.         if state == 0:
  104.             state = -1
  105.             ok = loadpaper_ui()
  106.             if ok:
  107.                 alignType3Phase1(dev)
  108.                 state = 1
  109.  
  110.         elif state == 1:
  111.             state = -1
  112.             ok, a = align_ui('A', 'h', 'kc', 2, 11)
  113.             if ok:
  114.                 state = 2
  115.  
  116.         elif state == 2:
  117.             state = -1
  118.             ok, b = align_ui('B', 'v', 'kc', 2, 11)
  119.             if ok:
  120.                 state = 3
  121.  
  122.         elif state == 3:
  123.             state = -1
  124.             ok, c = align_ui('C', 'v', 'k', 2, 11)
  125.             if ok:
  126.                 state = 4
  127.  
  128.         elif state == 4:
  129.             state = -1
  130.             ok, d = align_ui('D', 'v', 'kc', 2, 11)
  131.             if ok:
  132.                 state = 5
  133.  
  134.         elif state == 5:
  135.             state = -1
  136.             alignType3Phase2(dev, a, b, c, d)
  137.             if align_type == 9:
  138.                 state = 7
  139.             else:
  140.                 ok = loadpaper_ui()
  141.                 if ok:
  142.                     state = 6
  143.  
  144.         elif state == 6:
  145.             state = -1
  146.             alignType3Phase3(dev)
  147.             ok, zca = paperedge_ui(13)
  148.             if ok:
  149.                 state = 7
  150.  
  151.         elif state == 7:
  152.             ok = loadpaper_ui()
  153.             if ok:
  154.                 alignType3Phase4(dev, zca)
  155.             state = -1
  156.  
  157.     return ok
  158.  
  159.  
  160. def AlignxBow(dev, align_type, loadpaper_ui, align_ui, paperedge_ui,
  161.                invalidpen_ui, coloradj_ui): # Types 4, 5, and 7
  162.  
  163.     state, statepos = 0, 0
  164.     user_cancel_states = [1000, -1]
  165.     a, b, c, d, e, f, g = 0, 0, 0, 0, 0, 0, 0
  166.     error_states = [-1]
  167.     ok = False
  168.  
  169.     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  170.  
  171.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  172.         state, states = 100, [-1]
  173.  
  174.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  175.         state, states = 0, [2, 200, 3, -1]
  176.  
  177.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  178.         state, states = 0, [2, 200, 3, -1]
  179.  
  180.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  181.         state, states = 0, [2, 300, 3, -1]
  182.  
  183.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  184.         state, states = 0, [2, 400, 500, 600, 700, 3, 4, -1]
  185.  
  186.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  187.         state, states = 0, [2, 400, 500, 600, 700, 800, 900, 3, 4, -1]
  188.  
  189.     while state != -1:
  190.  
  191.         if state == 0:
  192.             ok = loadpaper_ui()
  193.             if ok:
  194.                 if align_type == 4:
  195.                     alignType4Phase1(dev)
  196.                 elif align_type == 5:
  197.                     alignType5Phase1(dev)
  198.                 elif align_type == 7:
  199.                     alignType7Phase1(dev)
  200.                 else:
  201.                     statepos, states = 0, error_states
  202.             else:
  203.                 statepos, states = 0, user_cancel_states
  204.  
  205.  
  206.         elif state == 2:
  207.             ok, a = paperedge_ui(13)
  208.             if not ok:
  209.                 statepos, states = 0, user_cancel_states
  210.  
  211.         elif state == 3:
  212.             if align_type == 4:
  213.                 alignType4Phase2(dev, a, b, c, d, e)
  214.             elif align_type == 5:
  215.                 alignType5Phase2(dev, a, b, c, d, e, f, g)
  216.             else:
  217.                 alignType7Phase2(dev, a, b, c, d, e, f, g)
  218.  
  219.         elif state == 4:
  220.             ok = loadpaper_ui()
  221.             if ok:
  222.                 if align_type == 4:
  223.                     alignType4Phase3(dev)
  224.                 elif align_type == 5:
  225.                     alignType5Phase3(dev)
  226.                 else:
  227.                     alignType7Phase3(dev)
  228.             else:
  229.                 statepos, states = 0, user_cancel_states
  230.  
  231.         elif state == 100:
  232.             invalidpen_ui()
  233.             state = -1
  234.  
  235.         elif state == 200: # B Line - Black only or photo only
  236.             ok, b = align_ui('B', 'v', 'k', 2, 11)
  237.             if not ok:
  238.                 statepos, states = 0, user_cancel_states
  239.  
  240.         elif state == 300: # B Line - Color only
  241.             ok, b = align_ui('B', 'v', 'kc', 2, 11)
  242.             if not ok:
  243.                 statepos, states = 0, user_cancel_states
  244.  
  245.         elif state == 400: # B Line - 2 pen
  246.             ok, b = align_ui('B', 'h', 'kc', 2, 17)
  247.             if not ok:
  248.                 statepos, states = 0, user_cancel_states
  249.  
  250.         elif state == 500: # C Line
  251.             ok, c = align_ui('C', 'v', 'kc', 2, 17)
  252.             if not ok:
  253.                 statepos, states = 0, user_cancel_states
  254.  
  255.         elif state == 600 : # D Line
  256.             ok, d = align_ui('D', 'v', 'k', 2, 11)
  257.             if not ok:
  258.                 statepos, states = 0, user_cancel_states
  259.  
  260.         elif state == 700: # E Line
  261.             ok, e = align_ui('E', 'v', 'kc', 2, 11)
  262.             if not ok:
  263.                 statepos, states = 0, user_cancel_states
  264.  
  265.         elif state == 800: # F Line
  266.             ok, f = coloradj_ui('F', 21)
  267.             if not ok:
  268.                 statepos, states = 0, user_cancel_states
  269.  
  270.         elif state == 900: # G Line
  271.             ok, f = coloradj_ui('G', 21)
  272.             if not ok:
  273.                 statepos, states = 0, user_cancel_states
  274.  
  275.         elif state == 1000: # User cancel
  276.             ok = False
  277.             log.warning("Alignment canceled at user request.")
  278.  
  279.         state = states[statepos]
  280.         statepos += 1
  281.  
  282.     return ok
  283.  
  284.  
  285. def AlignType6(dev, ui1, ui2, loadpaper_ui):
  286.     state = 0
  287.     ok = False
  288.  
  289.     while state != -1:
  290.         if state == 0:
  291.             state = 2
  292.             accept = ui1()
  293.             if not accept:
  294.                 # Need to printout alignment page
  295.                 state = 1
  296.  
  297.         elif state == 1: # Load and print
  298.             state = -1
  299.             ok = loadpaper_ui()
  300.             if ok:
  301.                 alignType6Phase1(dev)
  302.                 state = 2
  303.  
  304.         elif state == 2: # Finish
  305.             ui2()
  306.             state = -1
  307.  
  308.  
  309.     return ok
  310.  
  311. def AlignType8(dev, loadpaper_ui, align_ui): # 450
  312.     state, a, b, c, d = 0, 5, 5, 5, 5
  313.     ok = False
  314.  
  315.     while state != -1:
  316.  
  317.         if state == 0:
  318.             state = -1
  319.             ok = loadpaper_ui()
  320.             if ok:
  321.                 num_inks = alignType8Phase1(dev)
  322.                 state = 1
  323.  
  324.         elif state == 1:
  325.             state = -1
  326.             ok, a = align_ui('A', 'v', 'k', 3, 9)
  327.             if ok:
  328.                 state = 2
  329.  
  330.         elif state == 2:
  331.             state = -1
  332.             ok, b = align_ui('B', 'v', 'c', 3, 9)
  333.             if ok:
  334.                 state = 3
  335.  
  336.         elif state == 3:
  337.             state = -1
  338.             ok, c = align_ui('C', 'v', 'kc', 3, 9)
  339.             if ok:
  340.                 state = 4
  341.  
  342.         elif state == 4:
  343.             state = -1
  344.             ok, d = align_ui('D', 'h', 'kc', 3, 9)
  345.             if ok:
  346.                 state = 5
  347.  
  348.         elif state == 5:
  349.             alignType8Phase2(dev, num_inks, a, b, c, d)
  350.             state = -1
  351.  
  352.     return ok
  353.  
  354.  
  355. def AlignType10(dev, loadpaper_ui, align_ui):
  356.     pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  357.     log.debug("Pen config=%d" % pen_config)
  358.  
  359.     if pen_config == AGENT_CONFIG_BLACK_ONLY:
  360.         pattern = 1
  361.  
  362.     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  363.         pattern = 2
  364.  
  365.     elif pen_config in (AGENT_CONFIG_COLOR_AND_PHOTO, AGENT_CONFIG_COLOR_AND_GREY):
  366.         pattern = 3
  367.  
  368.     log.debug("Pattern=%d" % pattern)
  369.  
  370.     state = 0
  371.  
  372.     while state != -1:
  373.         if state == 0:
  374.             state = -1
  375.             ok = loadpaper_ui()
  376.             if ok:
  377.                 alignType10Phase1(dev)
  378.                 state = 1
  379.  
  380.         elif state == 1:
  381.             values = align_ui(pattern, ALIGN_TYPE_LBOW)
  382.             log.debug(values)
  383.             alignType10Phase2(dev, values, pattern)
  384.             state = 2
  385.  
  386.         elif state == 2:
  387.             state = -1
  388.             ok = loadpaper_ui()
  389.             if ok:
  390.                 alignType10Phase3(dev)
  391.  
  392.  
  393. def alignType10Phase1(dev):
  394.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  395.                          pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE)
  396.  
  397.     dev.closePrint()
  398.  
  399.  
  400. def alignType10Phase2(dev, values, pattern):
  401.     i, p = 0, ''.join([pcl.UEL, '\n'])
  402.  
  403.     for x in values:
  404.         i += 1
  405.         if not x:
  406.             break
  407.         p = ''.join([p, pcl.ESC, '*o5W\x1a', chr(i), '\x00', chr(pattern), chr(x), '\n'])
  408.  
  409.     p = ''.join([p, pcl.UEL]) 
  410.  
  411.     dev.printData(p)
  412.     dev.closePrint()
  413.  
  414. def alignType10Phase3(dev):
  415.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  416.                          pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE_VERIFICATION)
  417.  
  418.     dev.closePrint()
  419.  
  420.  
  421. def align10and11Controls(pattern, align_type):
  422.     if align_type == ALIGN_TYPE_LIDIL_0_5_4:
  423.         if pattern == 1:
  424.             controls = { 'A' : (True, 23),
  425.                          'B' : (True, 9),
  426.                          'C' : (True, 9),
  427.                          'D' : (False, 0),
  428.                          'E' : (False, 0),
  429.                          'F' : (False, 0),
  430.                          'G' : (False, 0),
  431.                          'H' : (False, 0),}
  432.         elif pattern == 2: # K + color (ii)
  433.             controls = { 'A' : (True, 17),
  434.                          'B' : (True, 23),
  435.                          'C' : (True, 23),
  436.                          'D' : (True, 23),
  437.                          'E' : (True, 9),
  438.                          'F' : (True, 9),
  439.                          'G' : (True, 9),
  440.                          'H' : (True, 9),}
  441.  
  442.         elif pattern == 3: # color + photo (iii)
  443.             controls = { 'A' : (True, 9),
  444.                          'B' : (True, 23),
  445.                          'C' : (True, 23),
  446.                          'D' : (True, 23),
  447.                          'E' : (True, 9),
  448.                          'F' : (True, 9),
  449.                          'G' : (True, 9),
  450.                          'H' : (True, 9),}    
  451.  
  452.     else:
  453.         if pattern == 1:
  454.             controls = {'A' : (True, 23),
  455.                          'B' : (True, 9),
  456.                          'C' : (True, 9),
  457.                          'D' : (False, 0),
  458.                          'E' : (False, 0),
  459.                          'F' : (False, 0),
  460.                          'G' : (False, 0),
  461.                          'H' : (False, 0),}
  462.         elif pattern == 2:
  463.             controls = {'A' : (True, 23),
  464.                         'B' : (True, 17),
  465.                          'C' : (True, 23),
  466.                          'D' : (True, 23),
  467.                          'E' : (True, 9),
  468.                          'F' : (True, 9),
  469.                          'G' : (True, 9),
  470.                          'H' : (True, 9),}
  471.  
  472.         elif pattern == 3:
  473.             controls = {'A' : (True, 23),
  474.                          'B' : (True, 9),
  475.                          'C' : (True, 23),
  476.                          'D' : (True, 23),
  477.                          'E' : (True, 9),
  478.                          'F' : (True, 9),
  479.                          'G' : (True, 9),
  480.                          'H' : (True, 9),}
  481.  
  482.     return controls
  483.  
  484.  
  485. def AlignType11(dev, loadpaper_ui, align_ui, invalidpen_ui):
  486.     pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  487.     log.debug("Pen config=%d" % pen_config)
  488.  
  489.     if pen_config in (AGENT_CONFIG_BLACK_ONLY, AGENT_CONFIG_COLOR_ONLY): # (i)
  490.         pattern = 1
  491.  
  492.     if pen_config == AGENT_CONFIG_COLOR_AND_BLACK: # (ii)
  493.         pattern = 2
  494.  
  495.     elif pen_config == AGENT_CONFIG_COLOR_AND_PHOTO: # (iii)
  496.         pattern = 3
  497.  
  498.     elif pen_config == AGENT_CONFIG_PHOTO_ONLY:
  499.         invalidpen_ui()
  500.         return
  501.  
  502.     log.debug("Pattern=%d" % pattern)
  503.  
  504.     state = 0
  505.  
  506.     while state != -1:
  507.         if state == 0:
  508.             state = -1
  509.             ok = loadpaper_ui()
  510.             if ok:
  511.                 alignType11Phase1(dev)
  512.                 state = 1
  513.  
  514.         elif state == 1:
  515.             values = align_ui(pattern, ALIGN_TYPE_LIDIL_0_5_4)
  516.             log.debug(values)
  517.             alignType11Phase2(dev, values, pattern, pen_config)
  518.             state = 2
  519.  
  520.         elif state == 2:
  521.             state = -1
  522.             ok = loadpaper_ui()
  523.             if ok:
  524.                 alignType11Phase3(dev)
  525.  
  526.  
  527. def alignType11Phase1(dev):
  528.     dev.printData(ldl.buildResetPacket())
  529.     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION))
  530.     dev.closePrint()
  531.  
  532.  
  533. def alignType11Phase2(dev, values, pattern, pen_config):
  534.     active_colors = 0
  535.  
  536.     if pen_config == AGENT_CONFIG_BLACK_ONLY:
  537.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K
  538.         values = values[:3]
  539.  
  540.     elif pen_config == AGENT_CONFIG_COLOR_ONLY:
  541.         active_colors = COMMAND_SET_PEN_ALIGNMENT_3_COLOR
  542.         values = values[:3]
  543.  
  544.     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  545.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K | ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
  546.  
  547.     elif pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  548.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR | ldl.COMMAND_SET_PEN_ALIGNMENT_3_PHOTO
  549.  
  550.     log.debug("Active colors=0x%x Values=%s" % (active_colors, values))
  551.  
  552.     dev.printData(ldl.buildSetPenAlignment3Packet(active_colors, values))
  553.     dev.closePrint()
  554.  
  555.  
  556. def alignType11Phase3(dev):
  557.     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION_VERIFY))
  558.     dev.closePrint()
  559.  
  560. def alignType2Phase1(dev): # Type 2 (8xx)
  561.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
  562.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
  563.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
  564.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
  565.     dev.closePrint()
  566.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align1_8xx.pcl.gz'))
  567.  
  568.  
  569. def alignType2Phase2(dev, a, b, c, d): # (8xx)
  570.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, (a - 6) * 12)
  571.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, (b - 6) * 12)
  572.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, (c - 3) * 12)
  573.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, (d - 3) * 12)
  574.     dev.writeEmbeddedPML(pml.OID_MARKING_AGENTS_INITIALIZED, 3)
  575.     dev.closePrint()
  576.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align2_8xx.pcl.gz'))
  577.  
  578.  
  579. def alignType3Phase1(dev): # Type 3 (9xx)
  580.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
  581.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
  582.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
  583.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
  584.     dev.closePrint()
  585.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align1_9xx.pcl.gz'))
  586.  
  587.  
  588. def alignType3Phase2(dev, a, b, c, d): # Type 3 (9xx)
  589.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, (a - 6) * 12)
  590.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, (6 - b) * 12)
  591.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, (6 - c) * 12)
  592.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, (6 - d) * 6)
  593.     dev.closePrint()
  594.  
  595. def alignType3Phase3(dev): # Type 3 (9xx)
  596.     dev.closePrint()
  597.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align3_9xx.pcl.gz'))
  598.  
  599.  
  600. def alignType3Phase4(dev, zca): # Type 3 (9xx)
  601.     dev.writeEmbeddedPML(pml.OID_MARKING_AGENTS_INITIALIZED, 3)
  602.     dev.closePrint()
  603.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align2_9xx.pcl.gz'))
  604.  
  605.  
  606. def alignType4Phase1(dev): # Type 4 (xBow/LIDIL 0.3.8)
  607.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_RESUME_NORMAL_OPERATION))
  608.  
  609.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  610.         return
  611.  
  612.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  613.         ldl_file = 'cbbcal.ldl.gz'
  614.  
  615.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  616.         ldl_file = 'cbccal.ldl.gz'
  617.  
  618.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  619.         ldl_file = 'cb2pcal.ldl.gz'
  620.  
  621.     dev.printData(ldl.buildSetPrinterAlignmentPacket(0, 0, 0, 0))
  622.     dev.closePrint()
  623.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', ldl_file))
  624.  
  625.  
  626. def alignType4Phase2(dev, a, b, c, d, e): # Type 4 (LIDIL 0.3.8)
  627.     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d" % (a, b, c, d, e))
  628.  
  629.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  630.         return
  631.  
  632.     # ZCA
  633.     zca = (7 - a) * -48
  634.     dev.printData(ldl.buildZCAPacket(zca))
  635.  
  636.     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  637.         k_bidi = (6 - b) * 2
  638.         dev.printData(ldl.buildSetPrinterAlignmentPacket(k_bidi, 0, 0, 0))
  639.  
  640.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  641.         cmy_bidi = (6 - b) * 2
  642.         dev.printData(ldl.buildSetPrinterAlignmentPacket(0, 0, 0, cmy_bidi))
  643.  
  644.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  645.         vert = (9 - b) * 2
  646.         hort = (9 - c) * -2
  647.         k_bidi = (6 - d) * 2
  648.         cmy_bidi = (6 - e) * 2
  649.  
  650.         dev.printData(ldl.buildSetPrinterAlignmentPacket(k_bidi, hort, vert, cmy_bidi))
  651.  
  652.     # Set alignment
  653.     dev.printData(ldl.buildSetPensAlignedPacket())
  654.     dev.closePrint()
  655.  
  656.  
  657. def alignType4Phase3(dev): # Type 4 (LIDIL 0.3.8)
  658.     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  659.         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', 'cb2pcal_done.ldl.gz'))
  660.  
  661.  
  662. def alignType5Phase1(dev): # Type 5 (xBow+/LIDIL 0.4.3)
  663.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_RESUME_NORMAL_OPERATION))
  664.  
  665.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  666.         return
  667.  
  668.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  669.         ldl_file = 'cbbcal.ldl.gz'
  670.  
  671.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  672.         ldl_file = 'cbpcal.ldl.gz'
  673.  
  674.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  675.         ldl_file = 'cbccal.ldl.gz'
  676.  
  677.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  678.         ldl_file = 'cb2pcal.ldl.gz'
  679.  
  680.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  681.         ldl_file = 'cbcpcal.ldl.gz'
  682.  
  683.     dev.printData(ldl.buildZCAPacket(0))
  684.     dev.printData(ldl.buildColorHortPacket(0))
  685.     dev.printData(ldl.buildColorVertPacket(0))
  686.     dev.printData(ldl.buildBlackVertPacket(0))
  687.     dev.printData(ldl.buildBlackHortPacket(0))
  688.     dev.printData(ldl.buildBlackBidiPacket(0))
  689.     dev.printData(ldl.buildColorBidiPacket(0))
  690.     dev.printData(ldl.buildPhotoHuePacket(0))
  691.     dev.printData(ldl.buildColorHuePacket(0))
  692.     dev.closePrint()
  693.  
  694.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', ldl_file))
  695.  
  696.  
  697. def alignType5Phase2(dev, a, b, c, d, e, f, g): # Type 5 (xBow+/LIDIL 0.4.3)
  698.     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d, F=%d, G=%d" % (a, b, c, d, e, f, g))
  699.  
  700.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  701.         return
  702.  
  703.     # ZCA
  704.     zca = (7 - a) * -48
  705.     dev.printData(ldl.buildZCAPacket(zca))
  706.  
  707.     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  708.         k_bidi = (6 - b) * 2
  709.         dev.printData(ldl.buildBlackBidiPacket(k_bidi))
  710.  
  711.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  712.         kcm_bidi = (6 - b) * 2
  713.         dev.printData(ldl.buildPhotoBidiPacket(kcm_bidi))
  714.  
  715.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  716.         cmy_bidi = (6 - b) * 2
  717.         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
  718.  
  719.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  720.         vert = (9 - b) * 2
  721.         hort = (9 - c) * -2
  722.         k_bidi = (6 - d) * 2
  723.         cmy_bidi = (6 - e) * 2
  724.  
  725.         dev.printData(ldl.buildColorHortPacket(0))
  726.         dev.printData(ldl.buildColorVertPacket(0))
  727.         dev.printData(ldl.buildBlackVertPacket(vert))
  728.         dev.printData(ldl.buildBlackHortPacket(hort))
  729.         dev.printData(ldl.buildBlackBidiPacket(k_bidi))
  730.         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
  731.  
  732.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  733.         vert = (9 - b) * 2
  734.         hort = (9 - c) * -2
  735.         cmy_bidi = (6 - d) * 2
  736.         kcm_bidi = (6 - e) * 2
  737.  
  738.         photo_adj = colorcal.PHOTO_ALIGN_TABLE[f][g]
  739.         color_adj = colorcal.COLOR_ALIGN_TABLE[f][g]
  740.  
  741.         dev.printData(ldl.buildPhotoHortPacket(hort))
  742.         dev.printData(ldl.buildPhotoVertPacket(vert))
  743.         dev.printData(ldl.buildColorHortPacket(0))
  744.         dev.printData(ldl.buildColorVertPacket(0))
  745.         dev.printData(ldl.buildPhotoBidiPacket(kcm_bidi))
  746.         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
  747.         dev.printData(ldl.buildPhotoHuePacket(photo_adj))
  748.         dev.printData(ldl.buildColorHuePacket(color_adj))
  749.  
  750.     # Set alignment
  751.     dev.printData(ldl.buildSetPensAlignedPacket())
  752.     dev.closePrint()
  753.  
  754.  
  755. def alignType5Phase3(dev): # Type 5 (xBow+/LIDIL 0.4.3)
  756.     dev.closePrint()
  757.     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  758.         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', "cb2pcal_done.ldl.gz"))
  759.  
  760.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  761.         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', "cbccal_done.ldl.gz"))
  762.  
  763.  
  764. def alignType6Phase1(dev): # Type 6 (xBow AiO)
  765.     dev.printData(ldl.buildPrintInternalPagePacket())
  766.     dev.closePrint()
  767.  
  768. def alignType7Phase1(dev): # Type 7 (xBow VIP)
  769.     # Zero out all alignment values
  770.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
  771.  
  772.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
  773.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
  774.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
  775.  
  776.     dev.writeEmbeddedPML(pml.OID_AGENT3_VERTICAL_ALIGNMENT, 0)
  777.     dev.writeEmbeddedPML(pml.OID_AGENT3_HORIZONTAL_ALIGNMENT, 0)
  778.     dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, 0)
  779.  
  780.     dev.writeEmbeddedPML(pml.OID_ZCA, 0)
  781.  
  782.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  783.         return
  784.  
  785.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  786.         pcl_file = 'crbcal.pcl.gz'
  787.  
  788.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  789.         pcl_file = 'crpcal.pcl.gz'
  790.  
  791.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  792.         pcl_file = 'crccal.pcl.gz'
  793.  
  794.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  795.         pcl_file = 'crcbcal.pcl.gz'
  796.  
  797.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  798.         pcl_file = 'crcpcal.pcl.gz'
  799.  
  800.     dev.closePrint()
  801.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', pcl_file))
  802.  
  803.  
  804. def alignType7Phase2(dev, a, b, c, d, e, f, g): # Type 7 (xBow VIP)
  805.     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d, F=%d, G=%d" % (a, b, c, d, e, f, g))
  806.  
  807.     # ZCA
  808.     zca = (7 - a) * -12
  809.     dev.writeEmbeddedPML(pml.OID_ZCA, zca)
  810.  
  811.     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  812.         k_bidi = (6 - b) * 6
  813.         dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, k_bidi)
  814.  
  815.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  816.         kcm_bidi = (6 - b) * 6
  817.         dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, kcm_bidi)
  818.  
  819.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  820.         cmy_bidi = (6 - b) * 6
  821.         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
  822.  
  823.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  824.         vert = (9 - b) * 6
  825.         hort = (9 - c) * -6
  826.         k_bidi = (6 - d) * 6
  827.         cmy_bidi = (6 - e) * 6
  828.  
  829.         dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, k_bidi)
  830.         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
  831.         dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, hort)
  832.         dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, vert)
  833.  
  834.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  835.         vert = (9 - b) * 6
  836.         hort = (9 - c) * -6
  837.         cmy_bidi = (6 - d) * 6
  838.         kcm_bidi = (6 - e) * 6
  839.  
  840.         photo_adj = colorcal.PHOTO_ALIGN_TABLE[f][g]
  841.         color_adj = colorcal.COLOR_ALIGN_TABLE[f][g]
  842.  
  843.         x = (color_adj << 8) + photo_adj
  844.  
  845.         dev.writeEmbeddedPML(pml.OID_COLOR_CALIBRATION_SELECTION, x)
  846.  
  847.         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
  848.         dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, kcm_bidi)
  849.         dev.writeEmbeddedPML(pml.OID_AGENT3_HORIZONTAL_ALIGNMENT, hort)
  850.         dev.writeEmbeddedPML(pml.OID_AGENT3_VERTICAL_ALIGNMENT, vert)
  851.  
  852.     dev.closePrint()
  853.  
  854. def alignType7Phase3(dev): # Type 7 (xBow VIP)
  855.     dev.closePrint()
  856.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', "crcaldone.pcl.gz"))
  857.  
  858.  
  859. def alignType8Phase1(dev): # 450
  860.     pens = dev.getStatusFromDeviceID()['agents']
  861.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  862.  
  863.     if AGENT_TYPE_KCM in pen_types:
  864.         f, num_inks = 'align6_450.pcl.gz', 6
  865.     else:
  866.         f, num_inks = 'align4_450.pcl.gz', 4
  867.  
  868.     dev.closePrint()
  869.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', f))
  870.  
  871.     return num_inks
  872.  
  873.  
  874. def alignType8Phase2(dev, num_inks, a, b, c, d): # 450
  875.     align_values1 = {1 : '\x00\x00\x18',
  876.                       2 : '\x00\x00\x12',
  877.                       3 : '\x00\x00\x0c',
  878.                       4 : '\x00\x00\x06',
  879.                       5 : '\x00\x00\x00',
  880.                       6 : '\x01\x00\x06',
  881.                       7 : '\x01\x00\x0c',
  882.                       8 : '\x01\x00\x12',
  883.                       9 : '\x01\x00\x18',
  884.                     }
  885.  
  886.     align_values2 = {1 : '\x00\x00\x12',
  887.                       2 : '\x00\x00\x0c',
  888.                       3 : '\x00\x00\x06',
  889.                       4 : '\x00\x00\x00',
  890.                       5 : '\x01\x00\x06',
  891.                       6 : '\x01\x00\x0c',
  892.                       7 : '\x01\x00\x12',
  893.                       8 : '\x01\x00\x18',
  894.                       9 : '\x01\x00\x1e',
  895.                     }
  896.  
  897.     align_values3 = {1 : '\x00\x00\x24',
  898.                       2 : '\x00\x00\x18',
  899.                       3 : '\x00\x00\x12',
  900.                       4 : '\x00\x00\x06',
  901.                       5 : '\x00\x00\x00',
  902.                       6 : '\x01\x00\x06',
  903.                       7 : '\x01\x00\x12',
  904.                       8 : '\x01\x00\x18',
  905.                       9 : '\x01\x00\x24',
  906.                     }
  907.  
  908.     if num_inks == 4:
  909.         s = ''.join([pcl.UEL,
  910.               '@PJL ENTER LANGUAGE=PCL3GUI\n',
  911.               pcl.RESET,
  912.               pcl.ESC, '*o5W\x1a\x01', align_values1[a],
  913.               pcl.ESC, '*o5W\x1a\x02', align_values2[a],
  914.               pcl.ESC, '*o5W\x1a\x03', align_values1[b],
  915.               pcl.ESC, '*o5W\x1a\x04', align_values1[b],
  916.               pcl.ESC, '*o5W\x1a\x08', align_values1[c],
  917.               pcl.ESC, '*o5W\x1a\x07', align_values1[d],
  918.               pcl.RESET,
  919.               pcl.UEL])
  920.  
  921.     else: # 6
  922.         s = ''.join([pcl.UEL,
  923.               '@PJL ENTER LANGUAGE=PCL3GUI\n',
  924.               pcl.RESET,
  925.               pcl.ESC, '*o5W\x1a\x05', align_values1[a],
  926.               pcl.ESC, '*o5W\x1a\x06', align_values3[a],
  927.               pcl.ESC, '*o5W\x1a\x03', align_values1[b],
  928.               pcl.ESC, '*o5W\x1a\x04', align_values1[b],
  929.               pcl.ESC, '*o5W\x1a\x0a', align_values1[c],
  930.               pcl.ESC, '*o5W\x1a\x09', align_values1[d],
  931.               pcl.RESET,
  932.               pcl.UEL])
  933.  
  934.     dev.printData(s)
  935.     dev.closePrint()
  936.     
  937.     
  938. def AlignType12(dev, loadpaper_ui):
  939.     if loadpaper_ui():
  940.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE)
  941.         dev.closePML()
  942.  
  943. # ********************** Clean **********************
  944.  
  945.  
  946. def cleaning(dev, clean_type, level1, level2, level3,
  947.               loadpaper_ui, dlg1, dlg2, dlg3, wait_ui):
  948.  
  949.     CLEAN_SLEEP_TIMER = 60
  950.     state = 0
  951.  
  952.     while state != -1:
  953.         if state == 0: # Initial level1 print
  954.             state = 1
  955.             if clean_type == 3:
  956.                 ok = loadpaper_ui()
  957.                 if not ok:
  958.                     state = -1
  959.  
  960.         elif state == 1: # Do level 1
  961.             level1(dev)
  962.             state = 2
  963.  
  964.         elif state == 2: # Load plain paper
  965.             state = -1
  966.             ok = loadpaper_ui()
  967.             if ok:
  968.                 state = 3
  969.  
  970.         elif state == 3: # Print test page
  971.             state = 4
  972.             print_clean_test_page(dev)
  973.  
  974.         elif state == 4: # Need level 2?
  975.             state = -1
  976.             ok = dlg1()
  977.             if ok:
  978.                 state = 5
  979.  
  980.         elif state == 5: # Do level 2
  981.             level2(dev)
  982.             state = 6
  983.  
  984.         elif state == 6: # Load plain paper
  985.             state = -1
  986.             ok = loadpaper_ui()
  987.             if ok:
  988.                 state = 7
  989.  
  990.         elif state == 7: # Print test page
  991.             state = 8
  992.             print_clean_test_page(dev)
  993.  
  994.         elif state == 8: # Need level 3?
  995.             state = -1
  996.             ok = dlg2()
  997.             if ok:
  998.                 state = 9
  999.  
  1000.         elif state == 9: # Do level 3
  1001.             level3(dev)
  1002.             state = 10
  1003.  
  1004.         elif state == 10: # Load plain paper
  1005.             state = -1
  1006.             ok = loadpaper_ui()
  1007.             if ok:
  1008.                 state = 11
  1009.  
  1010.         elif state == 11: # Print test page
  1011.             state = 12
  1012.             print_clean_test_page(dev)
  1013.  
  1014.         elif state == 12:
  1015.             state = -1
  1016.             dlg3()
  1017.  
  1018.     return ok
  1019.  
  1020.  
  1021. def print_clean_test_page(dev):
  1022.     dev.closePrint()
  1023.     dev.printGzipFile(os.path.join(prop.home_dir, 'data',
  1024.                       'ps', 'clean_page.pdf.gz'), raw=False)
  1025.  
  1026.  
  1027. def cleanType1(dev): # PCL, Level 1
  1028.     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_CLEAN)
  1029.     dev.closePrint()
  1030.  
  1031. def primeType1(dev): # PCL, Level 2
  1032.     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_PRIME)
  1033.     dev.closePrint()
  1034.  
  1035. def wipeAndSpitType1(dev): # PCL, Level 3
  1036.     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_WIPE_AND_SPIT)
  1037.     dev.closePrint()
  1038.  
  1039. def cleanType2(dev): # LIDIL, Level 1
  1040.     dev.printData(ldl.buildResetPacket())
  1041.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
  1042.                                        ldl.COMMAND_HANDLE_PEN,
  1043.                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL1))
  1044.     dev.closePrint()
  1045.  
  1046. def primeType2(dev): # LIDIL, Level 2
  1047.     dev.printData(ldl.buildResetPacket())
  1048.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
  1049.                                        ldl.COMMAND_HANDLE_PEN,
  1050.                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL2))
  1051.     dev.closePrint()
  1052.  
  1053. def wipeAndSpitType2(dev): # LIDIL, Level 3
  1054.     dev.printData(ldl.buildResetPacket())
  1055.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
  1056.                                        ldl.COMMAND_HANDLE_PEN,
  1057.                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL3))
  1058.     dev.closePrint()
  1059.  
  1060.  
  1061. # ********************** Color Cal **********************
  1062.  
  1063.  
  1064. def colorCalType1(dev, loadpaper_ui, colorcal_ui, photopenreq_ui): # 450
  1065.     value, state = 4, 0
  1066.     ok = False
  1067.     while state != -1:
  1068.  
  1069.         if state == 0:
  1070.             if colorCalType1PenCheck(dev):
  1071.                 state = 1
  1072.             else:
  1073.                 state = 100
  1074.  
  1075.         elif state == 1:
  1076.             state = -1
  1077.             ok = loadpaper_ui()
  1078.             if ok:
  1079.                 colorCalType1Phase1(dev)
  1080.                 state = 2
  1081.  
  1082.         elif state == 2:
  1083.             state = -1
  1084.             ok, value = colorcal_ui()
  1085.             if ok:
  1086.                 state = 3
  1087.  
  1088.         elif state == 3:
  1089.             colorCalType1Phase2(dev, value)
  1090.             state = -1
  1091.  
  1092.         elif state == 100:
  1093.             ok = False
  1094.             photopenreq_ui()
  1095.             state = -1
  1096.  
  1097.     return ok
  1098.  
  1099.  
  1100. def colorCalType1PenCheck(dev): # 450
  1101.     pens = dev.getStatusFromDeviceID()['agents']
  1102.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1103.  
  1104.     if AGENT_TYPE_KCM in pen_types:
  1105.         return True
  1106.  
  1107.     else:
  1108.         log.error("Cannot perform color calibration with no photo pen installed.")
  1109.         return False
  1110.  
  1111.  
  1112. def colorCalType1Phase1(dev): # 450
  1113.     dev.closePrint()
  1114.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'colorcal1_450.pcl.gz'))
  1115.  
  1116.  
  1117. def colorCalType1Phase2(dev, value): # 450
  1118.     color_cal = {1 : ('\x0f\x3c', '\x17\x0c'),
  1119.                   2 : ('\x10\xcc', '\x15\x7c'),
  1120.                   3 : ('\x12\x5c', '\x13\xec'),
  1121.                   4 : ('\x13\xec', '\x12\x5c'),
  1122.                   5 : ('\x15\x7c', '\x10\xcc'),
  1123.                   6 : ('\x17\x0c', '\x0f\x3c'),
  1124.                   7 : ('\x18\x9c', '\x0d\xac'),
  1125.                 }
  1126.  
  1127.     s = ''.join([pcl.UEL,
  1128.                   '@PJL ENTER LANGUAGE=PCL3GUI\n',
  1129.                   pcl.RESET,
  1130.                   pcl.ESC, '*o5W\x1a\x0c\x00', color_cal[value][0],
  1131.                   pcl.ESC, '*o5W\x1a\x0b\x00', color_cal[value][1],
  1132.                   pcl.RESET,
  1133.                   pcl.UEL])
  1134.  
  1135.     dev.printData(s)
  1136.     dev.closePrint()
  1137.  
  1138. #
  1139. # COLOR CAL TYPE 2
  1140. #
  1141.  
  1142. def colorCalType2(dev, loadpaper_ui, colorcal_ui, photopenreq_ui):
  1143.     value, state = 4, 0
  1144.     ok = True
  1145.     while state != -1:
  1146.  
  1147.         if state == 0:
  1148.             if colorCalType2PenCheck(dev):
  1149.                 state = 1
  1150.             else:
  1151.                 state = 100
  1152.  
  1153.         elif state == 1:
  1154.             state = -1
  1155.             ok = loadpaper_ui()
  1156.             if ok:
  1157.                 colorCalType2Phase1(dev)
  1158.                 state = 2
  1159.  
  1160.         elif state == 2:
  1161.             state = -1
  1162.             ok, value = colorcal_ui()
  1163.             if ok:
  1164.                 state = 3
  1165.  
  1166.         elif state == 3:
  1167.             colorCalType2Phase2(dev, value)
  1168.             state = -1
  1169.  
  1170.         elif state == 100:
  1171.             photopenreq_ui()
  1172.             ok = False
  1173.             state = -1
  1174.  
  1175.     return ok
  1176.  
  1177. def colorCalType2PenCheck(dev):
  1178.     pens = dev.getStatusFromDeviceID()['agents']
  1179.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1180.  
  1181.     if not AGENT_TYPE_NONE in pen_types:
  1182.         return True
  1183.  
  1184.     else:
  1185.         log.error("Cannot perform color calibration with pens missing.")
  1186.         return False
  1187.  
  1188. def colorCalType2Phase1(dev):
  1189.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  1190.                          pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1191.  
  1192.     dev.closePrint()
  1193.  
  1194.  
  1195. def colorCalType2Phase2(dev, value):
  1196.     c = colorcal.COLOR_CAL_TABLE
  1197.     p = ''.join(['\x1b&b19WPML \x04\x00\x06\x01\x04\x01\x05\x01\t\x08\x04',
  1198.                    chr(c[value*4]+100), chr(c[value*4+1]+100),
  1199.                    chr(c[value*4+2]+100), chr(c[value*4+3]+100),
  1200.                    '\x1b%-12345X'])
  1201.  
  1202.     dev.printData(p)
  1203.     dev.closePrint()
  1204.  
  1205.  
  1206. #
  1207. # COLOR CAL TYPE 3
  1208. #
  1209.  
  1210. def colorCalType3(dev, loadpaper_ui, colorcal_ui, photopenreq_ui):
  1211.     value, state = 4, 0
  1212.     ok = True
  1213.     while state != -1:
  1214.  
  1215.         if state == 0:
  1216.             if colorCalType3PenCheck(dev):
  1217.                 state = 1
  1218.             else:
  1219.                 state = 100
  1220.  
  1221.         elif state == 1:
  1222.             state = -1
  1223.             ok = loadpaper_ui()
  1224.             if ok:
  1225.                 colorCalType3Phase1(dev)
  1226.                 state = 2
  1227.  
  1228.         elif state == 2:
  1229.             state = -1
  1230.             ok, valueA = colorcal_ui('A', 21)
  1231.             if ok:
  1232.                 state = 3
  1233.  
  1234.         elif state == 3:
  1235.             state = -1
  1236.             ok, valueB = colorcal_ui('B', 21)
  1237.             if ok:
  1238.                 state = 4
  1239.  
  1240.         elif state == 4:
  1241.             colorCalType3Phase2(dev, valueA, valueB)
  1242.             state = -1
  1243.  
  1244.         elif state == 100:
  1245.             photopenreq_ui()
  1246.             ok = False
  1247.             state = -1
  1248.  
  1249.     return ok
  1250.  
  1251. def colorCalType3PenCheck(dev):
  1252.     pens = dev.getStatusFromDeviceID()['agents']
  1253.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1254.  
  1255.     if AGENT_TYPE_KCM in pen_types or \
  1256.       AGENT_TYPE_BLUE in pen_types:
  1257.         return True
  1258.  
  1259.     else:
  1260.         log.error("Cannot perform color calibration with no photo (or photo blue) pen installed.")
  1261.         return False
  1262.  
  1263.  
  1264. def colorCalType3Phase1(dev):
  1265.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  1266.                          pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1267.     dev.closePrint()
  1268.  
  1269. def colorCalType3Phase2(dev, A, B):
  1270.     photo_adj = colorcal.PHOTO_ALIGN_TABLE[A-1][B-1]
  1271.     color_adj = colorcal.COLOR_ALIGN_TABLE[A-1][B-1]
  1272.     adj_value = (color_adj << 8L) + photo_adj
  1273.  
  1274.     dev.writeEmbeddedPML(pml.OID_COLOR_CALIBRATION_SELECTION, adj_value)
  1275.     dev.closePrint()
  1276.  
  1277. def colorCalType4(dev, loadpaper_ui, colorcal_ui, wait_ui):
  1278.     state = 0
  1279.     ok = True
  1280.  
  1281.     while state != -1:
  1282.         if state == 0:
  1283.             state = -1
  1284.             ok = loadpaper_ui()
  1285.             if ok:
  1286.                 colorCalType4Phase1(dev)
  1287.                 state = 2
  1288.  
  1289.         elif state == 2:
  1290.             state = -1
  1291.             #wait_ui(90)
  1292.             ok, values = colorcal_ui()
  1293.             if ok:
  1294.                 state = 3
  1295.  
  1296.         elif state == 3:
  1297.             colorCalType4Phase2(dev, values)
  1298.             #wait_ui(5)
  1299.             state = 4
  1300.  
  1301.         elif state == 4:
  1302.             state = -1
  1303.             ok = loadpaper_ui()
  1304.             if ok:
  1305.                 colorCalType4Phase3(dev)
  1306.                 state = -1
  1307.  
  1308.     return ok
  1309.  
  1310.  
  1311. def colorCalType4Phase1(dev):
  1312.     dev.setPML(pml.OID_PRINT_INTERNAL_PAGE,
  1313.               pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1314.               
  1315.     dev.closePML()
  1316.  
  1317.  
  1318. def colorCalType4AdjValue(value):
  1319.     if value >= 100:
  1320.         return 200
  1321.     return value+100
  1322.  
  1323.  
  1324. def colorCalType4Phase2(dev, values):
  1325.     if -1 in values:
  1326.         Cadj, Madj, Yadj, cadj, madj, kadj = 244, 244, 244, 244, 244, 244
  1327.     else:
  1328.         sel1, sel2, sel3, sel4 = values
  1329.         tmp1 = colorcal.TYPE_4_C_TABLE[sel1][sel2]
  1330.         tmp2 = colorcal.TYPE_4_LC_TABLE[sel3][sel4]
  1331.  
  1332.         Cadj = colorCalType4AdjValue(tmp1)
  1333.         cadj = colorCalType4AdjValue(tmp1+tmp2)
  1334.  
  1335.         tmp1 = colorcal.TYPE_4_M_TABLE[sel1][sel2]
  1336.         tmp2 = colorcal.TYPE_4_LM_TABLE[sel3][sel4]
  1337.  
  1338.         Madj = colorCalType4AdjValue(tmp1)
  1339.         madj = colorCalType4AdjValue(tmp1+tmp2)
  1340.  
  1341.         Yadj = colorCalType4AdjValue(colorcal.TYPE_4_Y_TABLE[sel1][sel2])
  1342.         kadj = colorCalType4AdjValue(0)
  1343.  
  1344.     log.debug("C=%d, M=%d, Y=%d, c=%d, m=%d, k=%d\n" % (Cadj, Madj, Yadj, cadj, madj, kadj))
  1345.  
  1346.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_1,
  1347.                             kadj)
  1348.                             
  1349.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_2,
  1350.                             Cadj)
  1351.                             
  1352.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_3,
  1353.                             Madj)
  1354.     
  1355.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_4,
  1356.                             Yadj)
  1357.                             
  1358.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_5,
  1359.                             cadj)
  1360.     
  1361.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_6,
  1362.                             madj)
  1363.                             
  1364.     dev.closePML()
  1365.  
  1366.  
  1367. def colorCalType4Phase3(dev):
  1368.     dev.setPML(pml.OID_PRINT_INTERNAL_PAGE,
  1369.                          pml.PRINT_INTERNAL_PAGE_COLOR_PALETTE_CMYK_PAGE)
  1370.                          
  1371.     dev.closePML()
  1372.  
  1373.  
  1374. def colorCalType5(dev, loadpaper_ui):
  1375.     if loadpaper_ui():
  1376.         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 20;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
  1377.         dev.closePrint()
  1378.  
  1379.         
  1380. def colorCalType6(dev, loadpaper_ui):
  1381.     if loadpaper_ui():
  1382.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1383.         dev.closePML()
  1384.  
  1385. # ********************** LF Cal **********************        
  1386.         
  1387. def linefeedCalType1(dev, loadpaper_ui):
  1388.     if loadpaper_ui():
  1389.         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 3;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
  1390.         dev.closePrint()
  1391.         
  1392. def linefeedCalType2(dev, loadpaper_ui):
  1393.     if loadpaper_ui():
  1394.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_LINEFEED_CALIBRATION)
  1395.         dev.closePML()
  1396.  
  1397.  
  1398. # ********************** PQ Diag **********************        
  1399.         
  1400. def printQualityDiagType1(dev, loadpaper_ui):
  1401.     if loadpaper_ui():
  1402.         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 14;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
  1403.         dev.closePrint()
  1404.  
  1405. def printQualityDiagType2(dev, loadpaper_ui):
  1406.     if loadpaper_ui():
  1407.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_PRINT_QUALITY_DIAGNOSTIC)
  1408.         dev.closePML()
  1409.