home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / hplip / prnt / ldl.py < prev    next >
Encoding:
Python Source  |  2006-08-30  |  13.9 KB  |  326 lines

  1. # -*- coding: utf-8 -*-
  2. #
  3. # (c) Copyright 2003-2006 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.  
  23. # Std Lib
  24. import struct
  25. import sys
  26.  
  27.  
  28. PACKET_FRAME = ord('$')
  29. PACKET_PAD = 0xff
  30. CMD_HEADER_FMT = ">BHBBBHH" # 10 bytes
  31.  
  32. # Packet types
  33. PACKET_TYPE_COMMAND = 0
  34. PACKET_TYPE_DISABLE_PACING = 1
  35. PACKET_TYPE_ENABLE_PACING = 2
  36. PACKET_TYPE_RESUME_NORMAL_OPERATION = 3
  37. PACKET_TYPE_DISABLE_RESPONSES = 4
  38. PACKET_TYPE_ENABLE_RESPONSES = 5
  39. PACKET_TYPE_RESET_LIDIL = 6
  40. PACKET_TYPE_SYNC = 7
  41. PACKET_TYPE_SYNC_COMPLETE = 8
  42.  
  43. # Commands
  44.  
  45. # Handle Pen
  46. COMMAND_HANDLE_PEN = 8
  47. COMMAND_HANDLE_PEN_ENTER_PEN_CHANGE = 0
  48. COMMAND_HANDLE_PEN_COMPLETE_PEN_CHANGE = 1
  49. COMMAND_HANDLE_PEN_CLEAN_LEVEL1 = 2
  50. COMMAND_HANDLE_PEN_CLEAN_LEVEL2 = 3
  51. COMMAND_HANDLE_PEN_CLEAN_LEVEL3 = 4
  52.  
  53. # Set ZCA
  54. COMMAND_ZCA = 12
  55. COMMAND_ZCA_OPERATION = 11
  56.  
  57. # 0.3.8 Set Printer Alignment
  58. COMMAND_SET_PRINTER_ALIGNMENT = 12
  59. COMMAND_SET_PRINTER_ALIGNMENT_OPERATION = 6
  60.  
  61. # 0.4.3 Set Pen Alignment
  62. COMMAND_SET_PEN_ALIGNMENT = 12
  63. COMMAND_SET_PEN_ALIGNMENT_OPERATION = 18
  64. COMMAND_SET_PEN_ALIGNMENT_PEN_BLACK = 0
  65. COMMAND_SET_PEN_ALIGNMENT_PEN_COLOR = 1
  66. COMMAND_SET_PEN_ALIGNMENT_PEN_PHOTO = 2
  67. COMMAND_SET_PEN_ALIGNMENT_ITEM_HORT = 0
  68. COMMAND_SET_PEN_ALIGNMENT_ITEM_VERT = 1
  69. COMMAND_SET_PEN_ALIGNMENT_ITEM_BIDI = 2
  70.  
  71. # Set Pens Aligned
  72. COMMAND_SET_PENS_ALIGNED = 12
  73. COMMAND_SET_PENS_ALIGNED_OPERATION = 14
  74. COMMAND_SET_PENS_ALIGNED_K = 0x01
  75. COMMAND_SET_PENS_ALIGNED_C = 0x02
  76. COMMAND_SET_PENS_ALIGNED_M = 0x04
  77. COMMAND_SET_PENS_ALIGNED_Y = 0x08
  78. COMMAND_SET_PENS_ALIGNED_c = 0x10
  79. COMMAND_SET_PENS_ALIGNED_m = 0x20
  80. COMMAND_SET_PENS_ALIGNED_k = 0x40
  81.  
  82. # Set Hue Compensation
  83. COMMAND_SET_HUE_COMPENSATION = 12
  84. COMMAND_SET_HUE_COMPENSATION_OPERATION = 16
  85. COMMAND_SET_HUE_COMPENSATION_PEN_COLOR = 0
  86. COMMAND_SET_HUE_COMPENSATION_PEN_PHOTO = 1
  87.  
  88. # Print internal page
  89. COMMAND_PRINT_INTERNAL_PAGE = 12
  90. COMMAND_PRINT_INTERNAL_PAGE_OPERATION = 17
  91.  
  92. # Printer queries
  93. COMMAND_QUERY = 5
  94. QUERY_PRINTER_ALIGNMENT = 3 # 0.3.8
  95. QUERY_PEN_ALIGNMENT = 15 # 0.4.3
  96.  
  97.  
  98. def buildLIDILPacket(packet_type, command=0, operation=0, other={}):
  99.  
  100.     if packet_type == PACKET_TYPE_DISABLE_PACING:
  101.         p = '$\x00\x10\x00\x01\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  102.  
  103.     elif packet_type == PACKET_TYPE_ENABLE_PACING:
  104.         p = '$\x00\x10\x00\x02\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  105.  
  106.     elif packet_type == PACKET_TYPE_RESUME_NORMAL_OPERATION:
  107.         p = '$\x00\x10\x00\x03\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  108.  
  109.     elif packet_type == PACKET_TYPE_ENABLE_RESPONSES:
  110.         p = '$\x00\x10\x00\x05\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  111.  
  112.     elif packet_type == PACKET_TYPE_DISABLE_RESPONSES:
  113.         p = '$\x00\x10\x00\x04\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  114.  
  115.     elif packet_type == PACKET_TYPE_SYNC:
  116.         fmt = ''.join([CMD_HEADER_FMT, 'B'*245, 'B', 'B'*2048])
  117.         p = struct.pack(fmt, PACKET_FRAME, 256, 0, PACKET_TYPE_SYNC, 0, 0, 2048, (0,)*245, 
  118.                          PACKET_FRAME, (0,)*2048)
  119.  
  120.     elif packet_type == PACKET_TYPE_SYNC_COMPLETE:
  121.         p = '$\x00\x10\x00\x08\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  122.         #fmt = CMD_HEADER_FMT + 'BBBBBB'
  123.         #p = struct.pack( fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_SYNC_COMPLETE, 0, 0, 0,
  124.         #                 PACKET_PAD, PACKET_PAD, PACKET_PAD, PACKET_PAD, PACKET_PAD, PACKET_FRAME )
  125.  
  126.     elif packet_type == PACKET_TYPE_RESET_LIDIL:
  127.         p = '$\x00\x10\x00\x06\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff$'
  128.  
  129.     elif packet_type == PACKET_TYPE_COMMAND:
  130.  
  131.         if command == COMMAND_HANDLE_PEN:   
  132.             fmt = CMD_HEADER_FMT + "BBBBBB"
  133.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_HANDLE_PEN, 
  134.                              0, 0, operation, PACKET_PAD, PACKET_PAD,  PACKET_PAD, PACKET_PAD, PACKET_FRAME)
  135.  
  136.         elif command == COMMAND_SET_PRINTER_ALIGNMENT and operation == COMMAND_SET_PRINTER_ALIGNMENT_OPERATION: # 0.3.8   
  137.             fmt = CMD_HEADER_FMT + "BHBBBBBBBBBBBBB"
  138.             b = (0, 0, other['k_bidi'], other['c_vert'], other['c_hort'], other['c_bidi'],
  139.                         other['c_vert'], other['c_hort'], other['c_bidi'], other['c_vert'],
  140.                         other['c_hort'], other['c_bidi'], PACKET_FRAME)
  141.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_SET_PRINTER_ALIGNMENT, 
  142.                              0, 0, COMMAND_SET_PRINTER_ALIGNMENT_OPERATION, 0x0f, *b)
  143.  
  144.         elif command == COMMAND_SET_PEN_ALIGNMENT and operation == COMMAND_SET_PEN_ALIGNMENT_OPERATION: # 0.4.3
  145.             fmt = CMD_HEADER_FMT + "BBBbBB"
  146.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT, 
  147.                              0, 0, COMMAND_SET_PEN_ALIGNMENT_OPERATION, other['pen'], other['item'], other['value'], 
  148.                              PACKET_PAD, PACKET_FRAME)
  149.  
  150.         elif command == COMMAND_ZCA and operation == COMMAND_ZCA_OPERATION:    
  151.             fmt = CMD_HEADER_FMT + "BBhBB"
  152.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_ZCA, 
  153.                              0, 0, operation, 0, other['zca'], PACKET_PAD, PACKET_FRAME)
  154.  
  155.         elif command == COMMAND_SET_PENS_ALIGNED and operation == COMMAND_SET_PENS_ALIGNED_OPERATION:
  156.             fmt = CMD_HEADER_FMT + "BHBBB"
  157.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_SET_PENS_ALIGNED, 
  158.                              0, 0, operation, other['colors'], PACKET_PAD, PACKET_PAD, PACKET_FRAME)
  159.  
  160.         elif command == COMMAND_SET_HUE_COMPENSATION and operation == COMMAND_SET_HUE_COMPENSATION_OPERATION:
  161.             fmt = CMD_HEADER_FMT + "BBbBBB"
  162.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_SET_HUE_COMPENSATION, 
  163.                              0, 0, operation, other['which'], other['value'], PACKET_PAD, 
  164.                              PACKET_PAD, PACKET_FRAME)
  165.  
  166.         elif command == COMMAND_QUERY:
  167.             fmt = CMD_HEADER_FMT + "BBHBB"
  168.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_QUERY, 
  169.                              0, 0, 0, operation, 0, PACKET_PAD, PACKET_FRAME)
  170.  
  171.         elif command == COMMAND_PRINT_INTERNAL_PAGE: 
  172.             fmt = CMD_HEADER_FMT + "BBBBBB"
  173.             p = struct.pack(fmt, PACKET_FRAME, struct.calcsize(fmt), 0, PACKET_TYPE_COMMAND, COMMAND_PRINT_INTERNAL_PAGE, 
  174.                              0, 0, COMMAND_PRINT_INTERNAL_PAGE_OPERATION, PACKET_PAD, PACKET_PAD,  
  175.                              PACKET_PAD, PACKET_PAD, PACKET_FRAME)
  176.         else:
  177.             p = ''
  178.  
  179.     else:
  180.         p = ''
  181.  
  182.     assert len(p) >= 16
  183.  
  184.     return p
  185.  
  186.  
  187.  
  188. def buildSyncPacket():
  189.     return buildLIDILPacket(PACKET_TYPE_SYNC)
  190.  
  191. def buildSyncCompletePacket():
  192.     return buildLIDILPacket(PACKET_TYPE_SYNC_COMPLETE)
  193.  
  194. def buildResetPacket():
  195.     return buildLIDILPacket(PACKET_TYPE_RESET_LIDIL)
  196.  
  197. def buildGetAlignmentValues038Packet():
  198.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_QUERY, QUERY_PRINTER_ALIGNMENT)
  199.  
  200. def buildGetAlignmentValues043Packet():
  201.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_QUERY, QUERY_PEN_ALIGNMENT)
  202.  
  203. def buildEnableResponsesPacket(enable=True):
  204.     if enable:
  205.         return buildLIDILPacket(PACKET_TYPE_ENABLE_RESPONSES)
  206.     else:
  207.         return buildLIDILPacket(PACKET_TYPE_DISABLE_RESPONSES)
  208.  
  209. def buildSetPrinterAlignmentPacket(k_bidi,
  210.                                     c_vert, 
  211.                                     c_hort, 
  212.                                     c_bidi): # 0.3.8
  213.  
  214.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PRINTER_ALIGNMENT,
  215.                              COMMAND_SET_PRINTER_ALIGNMENT_OPERATION,
  216.                              other={'c_vert' : c_vert,
  217.                                      'c_hort' : c_hort,
  218.                                      'c_bidi' : c_bidi,
  219.                                      'k_bidi' : k_bidi,
  220.  
  221.                                     })
  222.  
  223. def buildPrintInternalPagePacket(): # Type 6
  224.     return buildLIDILPacket(PACKET_TYPE_COMMAND, 
  225.                              COMMAND_PRINT_INTERNAL_PAGE,
  226.                              COMMAND_PRINT_INTERNAL_PAGE_OPERATION)
  227.  
  228.  
  229. def buildZCAPacket(value):
  230.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_ZCA, 
  231.                              COMMAND_ZCA_OPERATION,  
  232.                              other={'zca' : value})
  233.  
  234. def buildBlackBidiPacket(value): # 0.4.3
  235.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  236.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  237.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_BLACK,
  238.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_BIDI,
  239.                                      'value' : value})
  240.  
  241. def buildPhotoBidiPacket(value): # 0.4.3
  242.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  243.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  244.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_PHOTO,
  245.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_BIDI,
  246.                                      'value' : value})
  247.  
  248. def buildColorBidiPacket(value): # 0.4.3
  249.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  250.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  251.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_COLOR,
  252.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_BIDI,
  253.                                      'value' : value})
  254.  
  255.  
  256. def buildColorHortPacket(value): # 0.4.3
  257.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  258.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  259.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_COLOR,
  260.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_HORT,
  261.                                      'value' :  value})
  262.  
  263. def buildColorVertPacket(value): # 0.4.3
  264.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  265.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  266.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_COLOR,
  267.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_VERT,
  268.                                      'value' :  value})
  269.  
  270. def buildBlackVertPacket(value): # 0.4.3
  271.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  272.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  273.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_BLACK,
  274.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_VERT,
  275.                                      'value' :  value})
  276. def buildBlackHortPacket(value): # 0.4.3
  277.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  278.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  279.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_BLACK,
  280.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_HORT,
  281.                                      'value' :  value})
  282.  
  283. def buildPhotoHortPacket(value): # 0.4.3
  284.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  285.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  286.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_PHOTO,
  287.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_HORT,
  288.                                      'value' :  value})
  289. def buildPhotoVertPacket(value): # 0.4.3
  290.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PEN_ALIGNMENT,
  291.                              COMMAND_SET_PEN_ALIGNMENT_OPERATION,
  292.                              other={'pen' : COMMAND_SET_PEN_ALIGNMENT_PEN_PHOTO,
  293.                                      'item' : COMMAND_SET_PEN_ALIGNMENT_ITEM_VERT,
  294.                                      'value' :  value})
  295.  
  296. def buildPhotoHuePacket(value): # 0.4.3
  297.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_HUE_COMPENSATION,
  298.                              COMMAND_SET_HUE_COMPENSATION_OPERATION,
  299.                              other={'which' : COMMAND_SET_HUE_COMPENSATION_PEN_PHOTO,
  300.                                      'value' :  value})
  301.  
  302.  
  303. def buildColorHuePacket(value): # 0.4.3
  304.    return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_HUE_COMPENSATION,
  305.                             COMMAND_SET_HUE_COMPENSATION_OPERATION,
  306.                             other={'which' : COMMAND_SET_HUE_COMPENSATION_PEN_COLOR,
  307.                                     'value' :  value})
  308.  
  309.  
  310. def buildSetPensAlignedPacket():
  311.     return buildLIDILPacket(PACKET_TYPE_COMMAND, COMMAND_SET_PENS_ALIGNED, 
  312.                               COMMAND_SET_PENS_ALIGNED_OPERATION,
  313.                               other={'colors' : COMMAND_SET_PENS_ALIGNED_C | 
  314.                                                  COMMAND_SET_PENS_ALIGNED_M | 
  315.                                                  COMMAND_SET_PENS_ALIGNED_Y |
  316.                                                  COMMAND_SET_PENS_ALIGNED_c | 
  317.                                                  COMMAND_SET_PENS_ALIGNED_m | 
  318.                                                  COMMAND_SET_PENS_ALIGNED_k | 
  319.                                                  COMMAND_SET_PENS_ALIGNED_K})
  320.  
  321.  
  322. if __name__ == "__main__":
  323.     pass    
  324.  
  325.  
  326.