219 lines
7.1 KiB
Python
Executable File
219 lines
7.1 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# (c) Copyright 2003-2015 HP Development Company, L.P.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
#
|
|
# Author: Don Welch
|
|
#
|
|
|
|
__version__ = '4.0'
|
|
__title__ = 'Printer Printhead Cleaning Utility'
|
|
__mod__ = 'hp-clean'
|
|
__doc__ = "Printhead cleaning utility for HPLIP supported inkjet printers."
|
|
|
|
#Std Lib
|
|
import sys
|
|
import re
|
|
import getopt
|
|
import time
|
|
import operator
|
|
import os
|
|
|
|
# Local
|
|
from base.g import *
|
|
from base import device, utils, maint, tui, module
|
|
from prnt import cups
|
|
|
|
try:
|
|
from importlib import import_module
|
|
except ImportError as e:
|
|
log.debug(e)
|
|
from base.utils import dyn_import_mod as import_module
|
|
|
|
|
|
def CleanUIx(level):
|
|
global d
|
|
ok = tui.continue_prompt("Ready to perform level %d cleaning ." % level)
|
|
|
|
if ok:
|
|
timeout = 0
|
|
time.sleep(5)
|
|
|
|
try:
|
|
while True:
|
|
update_spinner()
|
|
try:
|
|
d.open()
|
|
except Error:
|
|
time.sleep(2)
|
|
timeout += 2
|
|
continue
|
|
|
|
if d.isIdleAndNoError():
|
|
break
|
|
|
|
time.sleep(1)
|
|
timeout += 1
|
|
|
|
if timeout > 45:
|
|
log.error("Timeout waiting for print to finish.")
|
|
sys.exit(0)
|
|
|
|
|
|
finally:
|
|
cleanup_spinner()
|
|
d.close()
|
|
|
|
return ok
|
|
|
|
def CleanUI1(msg=""):
|
|
if not msg:
|
|
log.note("Please wait for page to complete printing before continuing.\nLevel 1 cleaning complete. If the printout looks OK.")
|
|
log.info("Note: Wait for previous print to finish")
|
|
else:
|
|
log.note(msg)
|
|
|
|
log.info("Press enter 'q' to quit or <enter> to do a level 2 cleaning.")
|
|
return CleanUIx(2)
|
|
|
|
|
|
def CleanUI2(msg=""):
|
|
if not msg:
|
|
log.note("Please wait for page to complete printing before continuing.\nLevel 2 cleaning complete. If the printout looks OK.")
|
|
log.info("Note: Wait for previous print to finish")
|
|
else:
|
|
log.note(msg)
|
|
|
|
log.info("Press enter 'q' to quit or <enter> to do a level 3 cleaning.")
|
|
log.warn("Level 3 uses a lot of ink.")
|
|
return CleanUIx(3)
|
|
|
|
def CleanUI3(msg =""):
|
|
if msg:
|
|
log.info(msg)
|
|
else:
|
|
log.info("\nLevel 3 cleaning complete. Check this page to see if the problem was fixed. If the test page was not printed OK, replace the printhead(s).")
|
|
|
|
|
|
try:
|
|
mod = module.Module(__mod__, __title__, __version__, __doc__, None,
|
|
(INTERACTIVE_MODE, GUI_MODE), (UI_TOOLKIT_QT4, UI_TOOLKIT_QT5))
|
|
|
|
mod.setUsage(module.USAGE_FLAG_DEVICE_ARGS,
|
|
see_also_list=['hp-align', 'hp-clean', 'hp-linefeedcal',
|
|
'hp-pqdiag'])
|
|
|
|
opts, device_uri, printer_name, mode, ui_toolkit, lang = \
|
|
mod.parseStdOpts()
|
|
|
|
device_uri = mod.getDeviceUri(device_uri, printer_name,
|
|
filter={'clean-type': (operator.ne, CLEAN_TYPE_NONE)})
|
|
|
|
if not device_uri:
|
|
sys.exit(1)
|
|
log.info("Using device : %s\n" % device_uri)
|
|
if mode == GUI_MODE:
|
|
if not utils.canEnterGUIMode4():
|
|
log.error("%s -u/--gui requires Qt4 GUI support. Entering interactive mode." % __mod__)
|
|
mode = INTERACTIVE_MODE
|
|
|
|
if mode == INTERACTIVE_MODE:
|
|
try:
|
|
d = device.Device(device_uri, printer_name)
|
|
except Error as e:
|
|
log.error("Unable to open device: %s" % e.msg)
|
|
sys.exit(0)
|
|
|
|
try:
|
|
try:
|
|
d.open()
|
|
except Error:
|
|
log.error("Unable to print to printer. Please check device and try again.")
|
|
sys.exit(1)
|
|
|
|
if d.isIdleAndNoError():
|
|
clean_type = d.mq.get('clean-type', CLEAN_TYPE_NONE)
|
|
log.debug("Clean type=%d" % clean_type)
|
|
d.close()
|
|
|
|
try:
|
|
if clean_type == CLEAN_TYPE_UNSUPPORTED:
|
|
log.error("Cleaning through HPLIP not supported for this printer. Please use the printer's front panel to perform printhead cleaning.")
|
|
|
|
elif clean_type == CLEAN_TYPE_PCL:
|
|
maint.cleaning(d, clean_type, maint.cleanType1, maint.primeType1,
|
|
maint.wipeAndSpitType1, tui.load_paper_prompt,
|
|
CleanUI1, CleanUI2, CleanUI3,
|
|
None)
|
|
|
|
elif clean_type == CLEAN_TYPE_LIDIL:
|
|
maint.cleaning(d, clean_type, maint.cleanType2, maint.primeType2,
|
|
maint.wipeAndSpitType2, tui.load_paper_prompt,
|
|
CleanUI1, CleanUI2, CleanUI3,
|
|
None)
|
|
|
|
elif clean_type == CLEAN_TYPE_PCL_WITH_PRINTOUT:
|
|
maint.cleaning(d, clean_type, maint.cleanType1, maint.primeType1,
|
|
maint.wipeAndSpitType1, tui.load_paper_prompt,
|
|
CleanUI1, CleanUI2, CleanUI3,
|
|
None)
|
|
|
|
elif clean_type == CLEAN_TYPE_LEDM:
|
|
maint.cleaning(d, clean_type, maint.cleanTypeLedm, maint.cleanTypeLedm1,
|
|
maint.cleanTypeLedm2, tui.load_paper_prompt,
|
|
CleanUI1, CleanUI2, CleanUI3,
|
|
None, maint.isCleanTypeLedmWithPrint)
|
|
|
|
else:
|
|
log.error("Cleaning not needed or supported on this device.")
|
|
|
|
except Error as e:
|
|
log.error("An error occured: %s" % e.msg)
|
|
|
|
else:
|
|
log.error("Device is busy or in an error state. Please check device and try again.")
|
|
sys.exit(1)
|
|
finally:
|
|
d.close()
|
|
|
|
else:
|
|
|
|
QApplication, ui_package = utils.import_dialog(ui_toolkit)
|
|
ui = import_module(ui_package + ".cleandialog")
|
|
|
|
|
|
#try:
|
|
if 1:
|
|
app = QApplication(sys.argv)
|
|
dlg = ui.CleanDialog(None, device_uri)
|
|
dlg.show()
|
|
try:
|
|
log.debug("Starting GUI loop...")
|
|
app.exec_()
|
|
except KeyboardInterrupt:
|
|
sys.exit(0)
|
|
|
|
#finally:
|
|
if 1:
|
|
sys.exit(0)
|
|
|
|
except KeyboardInterrupt:
|
|
log.error("User exit")
|
|
|
|
log.info("")
|
|
log.info("Done.")
|