From f915092f83d2542899043eec2799e6dfb6119314 Mon Sep 17 00:00:00 2001 From: Thomas Karl Pietrowski Date: Sun, 14 Aug 2016 17:37:36 +0200 Subject: [PATCH] CURA-2079: Finish firmware upload process on errors Looking at the old code shows that the download process was never completely finished. The according function was only return'ed, but no signal was emitted to the window to give the user the possibility to close it again. Optionally, it would be useful here to pass messages to the window dialog to inform the user about problems. However, this code is untested because: 1. I don't know where put my printers *.hex-file, when coding here with my editor, 2. Have no idea how to reproduce the IO errors reported at JIRA, so fingers crossed here. Contributes to CURA-2079 --- plugins/USBPrinting/USBPrinterOutputDevice.py | 20 +++++++++++++------ .../USBPrinterOutputDeviceManager.py | 6 +++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index 421168b87f..d7775ea62e 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -182,7 +182,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice): if len(hex_file) == 0: Logger.log("e", "Unable to read provided hex file. Could not update firmware") - return + self._updateFirmware_completed() + return programmer = stk500v2.Stk500v2() programmer.progressCallback = self.setProgress @@ -197,6 +198,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): if not programmer.isConnected(): Logger.log("e", "Unable to connect with serial. Could not update firmware") + self._updateFirmware_completed() return self._updating_firmware = True @@ -206,15 +208,21 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._updating_firmware = False except Exception as e: Logger.log("e", "Exception while trying to update firmware %s" %e) - self._updating_firmware = False + self._updateFirmware_completed() return programmer.close() + self._updateFirmware_completed() + return + + ## Private function which makes sure that firmware update process has completed/ended + def _updateFirmware_completed(self): self.setProgress(100, 100) self._firmware_update_finished = True - + self.resetFirmwareUpdate(update_has_finished=True) self.firmwareUpdateComplete.emit() - self.firmwareUpdateChange.emit() + + return ## Upload new firmware to machine # \param filename full path of firmware file to be uploaded @@ -227,8 +235,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice): def firmwareUpdateFinished(self): return self._firmware_update_finished - def resetFirmwareUpdateFinished(self): - self._firmware_update_finished = False + def resetFirmwareUpdate(self, update_has_finished = False): + self._firmware_update_finished = update_has_finished self.firmwareUpdateChange.emit() @pyqtSlot() diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index 1a53828d06..34d872c67a 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -103,7 +103,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): return for printer_connection in self._usb_output_devices: - self._usb_output_devices[printer_connection].resetFirmwareUpdateFinished() + self._usb_output_devices[printer_connection].resetFirmwareUpdate() self.spawnFirmwareInterface("") for printer_connection in self._usb_output_devices: try: @@ -111,7 +111,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): except FileNotFoundError: # Should only happen in dev environments where the resources/firmware folder is absent. self._usb_output_devices[printer_connection].setProgress(100, 100) - Logger.log("w", "No firmware found for printer %s", printer_connection) + Logger.log("w", "No firmware found for printer %s called '%s'" %(printer_connection, self._getDefaultFirmwareName())) Message(i18n_catalog.i18nc("@info", "Could not find firmware required for the printer at %s.") % printer_connection).show() self._firmware_view.close() @@ -126,7 +126,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin, Extension): self._usb_output_devices[serial_port].updateFirmware(Resources.getPath(CuraApplication.ResourceTypes.Firmware, self._getDefaultFirmwareName())) except FileNotFoundError: self._firmware_view.close() - Logger.log("e", "Could not find firmware required for this machine") + Logger.log("e", "Could not find firmware required for this machine called '%s'" %(self._getDefaultFirmwareName())) return False return True return False