From c8130051702245a00908291cf88c929537de63c2 Mon Sep 17 00:00:00 2001 From: joba-1 Date: Thu, 11 Oct 2018 23:05:08 +0200 Subject: [PATCH] Prevent Cura from messing with serial ports of other devices by filtering ports with regular expressions passed in as environment variables --- .../USBPrinterOutputDeviceManager.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index 2ee85187ee..da618181fb 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -5,6 +5,8 @@ import threading import platform import time import serial.tools.list_ports +from os import environ +from re import search from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal @@ -175,6 +177,27 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin): port = (port.device, port.description, port.hwid) if only_list_usb and not port[2].startswith("USB"): continue + + # To prevent cura from messing with serial ports of other devices, + # filter by regular expressions passed in as environment variables. + # Get possible patterns with python3 -m serial.tools.list_ports -v + + # set CURA_DEVICENAMES=USB[1-9] -> e.g. not matching /dev/ttyUSB0 + pattern = environ.get('CURA_DEVICENAMES') + if pattern and not search(pattern, port[0]): + continue + + # set CURA_DEVICETYPES=CP2102 -> match a type of serial converter + pattern = environ.get('CURA_DEVICETYPES') + if pattern and not search(pattern, port[1]): + continue + + # set CURA_DEVICEINFOS=LOCATION=2-1.4 -> match a physical port + # set CURA_DEVICEINFOS=VID:PID=10C4:EA60 -> match a vendor:product + pattern = environ.get('CURA_DEVICEINFOS') + if pattern and not search(pattern, port[2]): + continue + base_list += [port[0]] return list(base_list)