Repository navigation
Expand file tree
/
Copy pathConnectSerialAction.py
More file actions
112 lines (86 loc) · 4.62 KB
/
Copy pathConnectSerialAction.py
File metadata and controls
112 lines (86 loc) · 4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# Copyright (c) 2019 Aldo Hoeben / fieldOfView
# SerialConnection is released under the terms of the GPLv3 or higher.
from cura.MachineAction import MachineAction
from UM.i18n import i18nCatalog
from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Application import Application
from UM.Settings.ContainerRegistry import ContainerRegistry
from . import SerialOutputDevicePlugin
from PyQt5.QtCore import pyqtSignal, pyqtSlot, pyqtProperty
import os.path
catalog = i18nCatalog("cura")
class ConnectSerialAction(MachineAction):
def __init__(self, parent = None):
super().__init__("ConnectSerialAction", catalog.i18nc("@action", "Connect to serial port"))
self._qml_url = "ConnectSerialAction.qml"
self._output_device_plugin = []
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
self._output_device_plugin = None
Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
def _onEngineCreated(self) -> None:
self._output_device_plugin = SerialOutputDevicePlugin.SerialOutputDevicePlugin.getInstance()
self._output_device_plugin.serialPortsChanged.connect(self._onSerialPortsChanged)
def _onSerialPortsChanged(self) -> None:
self.serialPortsChanged.emit()
def _onContainerAdded(self, container) -> None:
# Add this action as a supported action to all machine definitions
if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine" and \
container.getMetaDataEntry("supports_usb_connection") and \
"text/x-gcode" in [file_type.strip() for file_type in container.getMetaDataEntry("file_formats").split(";")]:
Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
Application.getInstance().getMachineActionManager().addFirstStartAction(container.getId(), self.getKey())
@pyqtSlot(str)
def setSerialPort(self, serial_port):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
global_container_stack.setMetaDataEntry("serial_port", serial_port)
self.serialPortChanged.emit()
serialPortChanged = pyqtSignal()
## Get the stored serial port for this machine
# \return key String containing the serial port device name, AUTO or NONE
@pyqtProperty(str, notify = serialPortChanged)
def serialPort(self):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
return global_container_stack.getMetaDataEntry("serial_port", "NONE")
else:
return "NONE"
@pyqtSlot(int)
def setBaudRate(self, serial_rate):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
global_container_stack.setMetaDataEntry("serial_rate", serial_rate)
self.baudRateChanged.emit()
baudRateChanged = pyqtSignal()
## Get the stored serial rate for this machine
# \return key String containing the serial rate
@pyqtProperty(int, notify = baudRateChanged)
def baudRate(self):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
return int(global_container_stack.getMetaDataEntry("serial_rate", self.allBaudRates[0]))
else:
return self.allBaudRates[0]
@pyqtSlot(bool)
def setAutoConnect(self, serial_auto_connect):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
global_container_stack.setMetaDataEntry("serial_auto_connect", str(serial_auto_connect))
self.autoConnectChanged.emit()
autoConnectChanged = pyqtSignal()
## Get the stored serial rate for this machine
# \return key String containing the serial rate device name, AUTO or NONE
@pyqtProperty(bool, notify = autoConnectChanged)
def autoConnect(self):
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack:
return global_container_stack.getMetaDataEntry("serial_auto_connect") == "True"
else:
return False
serialPortsChanged = pyqtSignal()
@pyqtProperty("QVariantList", notify = serialPortsChanged)
def portList(self):
return self._output_device_plugin.getSerialPortList()
@pyqtProperty("QList<int>", constant = True)
def allBaudRates(self):
return [250000, 230400, 115200, 57600, 38400, 19200, 9600]