mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 14:37:29 -06:00
Allow printer output devices to set their ability to update firmware
This commit is contained in:
parent
c1d7ca7bff
commit
4bea1410b8
5 changed files with 40 additions and 17 deletions
|
@ -29,8 +29,6 @@ class GenericOutputController(PrinterOutputController):
|
||||||
self._output_device.printersChanged.connect(self._onPrintersChanged)
|
self._output_device.printersChanged.connect(self._onPrintersChanged)
|
||||||
self._active_printer = None
|
self._active_printer = None
|
||||||
|
|
||||||
self.can_update_firmware = True
|
|
||||||
|
|
||||||
def _onPrintersChanged(self):
|
def _onPrintersChanged(self):
|
||||||
if self._active_printer:
|
if self._active_printer:
|
||||||
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
|
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
from UM.Signal import Signal
|
||||||
|
|
||||||
MYPY = False
|
MYPY = False
|
||||||
if MYPY:
|
if MYPY:
|
||||||
|
@ -56,3 +57,9 @@ class PrinterOutputController:
|
||||||
|
|
||||||
def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
|
def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
|
||||||
Logger.log("w", "Custom command not implemented in controller")
|
Logger.log("w", "Custom command not implemented in controller")
|
||||||
|
|
||||||
|
canUpdateFirmwareChanged = Signal()
|
||||||
|
def setCanUpdateFirmware(self, can_update_firmware: bool):
|
||||||
|
if can_update_firmware != self.can_update_firmware:
|
||||||
|
self.can_update_firmware = can_update_firmware
|
||||||
|
self.canUpdateFirmwareChanged.emit()
|
|
@ -26,6 +26,7 @@ class PrinterOutputModel(QObject):
|
||||||
buildplateChanged = pyqtSignal()
|
buildplateChanged = pyqtSignal()
|
||||||
cameraChanged = pyqtSignal()
|
cameraChanged = pyqtSignal()
|
||||||
configurationChanged = pyqtSignal()
|
configurationChanged = pyqtSignal()
|
||||||
|
canUpdateFirmwareChanged = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None, firmware_version = "") -> None:
|
def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None, firmware_version = "") -> None:
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
@ -34,6 +35,7 @@ class PrinterOutputModel(QObject):
|
||||||
self._name = ""
|
self._name = ""
|
||||||
self._key = "" # Unique identifier
|
self._key = "" # Unique identifier
|
||||||
self._controller = output_controller
|
self._controller = output_controller
|
||||||
|
self._controller.canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged)
|
||||||
self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)]
|
self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)]
|
||||||
self._printer_configuration = ConfigurationModel() # Indicates the current configuration setup in this printer
|
self._printer_configuration = ConfigurationModel() # Indicates the current configuration setup in this printer
|
||||||
self._head_position = Vector(0, 0, 0)
|
self._head_position = Vector(0, 0, 0)
|
||||||
|
@ -284,6 +286,10 @@ class PrinterOutputModel(QObject):
|
||||||
return self._controller.can_update_firmware
|
return self._controller.can_update_firmware
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# Stub to connect UM.Signal to pyqtSignal
|
||||||
|
def _onControllerCanUpdateFirmwareChanged(self):
|
||||||
|
self.canUpdateFirmwareChanged.emit()
|
||||||
|
|
||||||
# Returns the configuration (material, variant and buildplate) of the current printer
|
# Returns the configuration (material, variant and buildplate) of the current printer
|
||||||
@pyqtProperty(QObject, notify = configurationChanged)
|
@pyqtProperty(QObject, notify = configurationChanged)
|
||||||
def printerConfiguration(self):
|
def printerConfiguration(self):
|
||||||
|
|
|
@ -183,7 +183,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||||
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
|
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
|
||||||
num_extruders = container_stack.getProperty("machine_extruder_count", "value")
|
num_extruders = container_stack.getProperty("machine_extruder_count", "value")
|
||||||
# Ensure that a printer is created.
|
# Ensure that a printer is created.
|
||||||
self._printers = [PrinterOutputModel(output_controller=GenericOutputController(self), number_of_extruders=num_extruders)]
|
controller = GenericOutputController(self)
|
||||||
|
controller.setCanUpdateFirmware(True)
|
||||||
|
self._printers = [PrinterOutputModel(output_controller=controller, number_of_extruders=num_extruders)]
|
||||||
self._printers[0].updateName(container_stack.getName())
|
self._printers[0].updateName(container_stack.getName())
|
||||||
self.setConnectionState(ConnectionState.connected)
|
self.setConnectionState(ConnectionState.connected)
|
||||||
self._update_thread.start()
|
self._update_thread.start()
|
||||||
|
@ -353,7 +355,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
||||||
elapsed_time = int(time() - self._print_start_time)
|
elapsed_time = int(time() - self._print_start_time)
|
||||||
print_job = self._printers[0].activePrintJob
|
print_job = self._printers[0].activePrintJob
|
||||||
if print_job is None:
|
if print_job is None:
|
||||||
print_job = PrintJobOutputModel(output_controller = GenericOutputController(self), name= CuraApplication.getInstance().getPrintInformation().jobName)
|
controller = GenericOutputController(self)
|
||||||
|
controller.setCanUpdateFirmware(True)
|
||||||
|
print_job = PrintJobOutputModel(output_controller = controller, name= CuraApplication.getInstance().getPrintInformation().jobName)
|
||||||
print_job.updateState("printing")
|
print_job.updateState("printing")
|
||||||
self._printers[0].updateActivePrintJob(print_job)
|
self._printers[0].updateActivePrintJob(print_job)
|
||||||
|
|
||||||
|
|
|
@ -16,17 +16,17 @@ Cura.MachineAction
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
property bool printerConnected: Cura.MachineManager.printerConnected
|
property bool printerConnected: Cura.MachineManager.printerConnected
|
||||||
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
|
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
|
||||||
property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.canUpdateFirmware : False
|
property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : False
|
||||||
|
|
||||||
Item
|
Column
|
||||||
{
|
{
|
||||||
id: upgradeFirmwareMachineAction
|
id: upgradeFirmwareMachineAction
|
||||||
anchors.fill: parent;
|
anchors.fill: parent;
|
||||||
UM.I18nCatalog { id: catalog; name:"cura"}
|
UM.I18nCatalog { id: catalog; name:"cura"}
|
||||||
|
spacing: UM.Theme.getSize("default_margin").height
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: pageTitle
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
text: catalog.i18nc("@title", "Upgrade Firmware")
|
text: catalog.i18nc("@title", "Upgrade Firmware")
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
|
@ -34,9 +34,6 @@ Cura.MachineAction
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: pageDescription
|
|
||||||
anchors.top: pageTitle.bottom
|
|
||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
text: catalog.i18nc("@label", "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work.")
|
text: catalog.i18nc("@label", "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work.")
|
||||||
|
@ -44,9 +41,6 @@ Cura.MachineAction
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
id: upgradeText1
|
|
||||||
anchors.top: pageDescription.bottom
|
|
||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
||||||
width: parent.width
|
width: parent.width
|
||||||
wrapMode: Text.WordWrap
|
wrapMode: Text.WordWrap
|
||||||
text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements.");
|
text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements.");
|
||||||
|
@ -54,8 +48,6 @@ Cura.MachineAction
|
||||||
|
|
||||||
Row
|
Row
|
||||||
{
|
{
|
||||||
anchors.top: upgradeText1.bottom
|
|
||||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
width: childrenRect.width
|
width: childrenRect.width
|
||||||
spacing: UM.Theme.getSize("default_margin").width
|
spacing: UM.Theme.getSize("default_margin").width
|
||||||
|
@ -64,7 +56,7 @@ Cura.MachineAction
|
||||||
{
|
{
|
||||||
id: autoUpgradeButton
|
id: autoUpgradeButton
|
||||||
text: catalog.i18nc("@action:button", "Automatically upgrade Firmware");
|
text: catalog.i18nc("@action:button", "Automatically upgrade Firmware");
|
||||||
enabled: parent.firmwareName != "" && activeOutputDevice
|
enabled: parent.firmwareName != "" && canUpdateFirmware
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
activeOutputDevice.updateFirmware(parent.firmwareName)
|
activeOutputDevice.updateFirmware(parent.firmwareName)
|
||||||
|
@ -74,7 +66,7 @@ Cura.MachineAction
|
||||||
{
|
{
|
||||||
id: manualUpgradeButton
|
id: manualUpgradeButton
|
||||||
text: catalog.i18nc("@action:button", "Upload custom Firmware");
|
text: catalog.i18nc("@action:button", "Upload custom Firmware");
|
||||||
enabled: activeOutputDevice != null
|
enabled: canUpdateFirmware
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
customFirmwareDialog.open()
|
customFirmwareDialog.open()
|
||||||
|
@ -82,6 +74,22 @@ Cura.MachineAction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
visible: !printerConnected
|
||||||
|
text: catalog.i18nc("@label", "Firmware can not be upgraded because there is no connection with the printer.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
width: parent.width
|
||||||
|
wrapMode: Text.WordWrap
|
||||||
|
visible: printerConnected && !canUpdateFirmware
|
||||||
|
text: catalog.i18nc("@label", "Firmware can not be upgraded because the connection with the printer does not support upgrading firmware.");
|
||||||
|
}
|
||||||
|
|
||||||
FileDialog
|
FileDialog
|
||||||
{
|
{
|
||||||
id: customFirmwareDialog
|
id: customFirmwareDialog
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue