summaryrefslogtreecommitdiff
path: root/api_layers/arduino_layer.py
diff options
context:
space:
mode:
Diffstat (limited to 'api_layers/arduino_layer.py')
-rw-r--r--api_layers/arduino_layer.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/api_layers/arduino_layer.py b/api_layers/arduino_layer.py
index 07520d6..cd7cb92 100644
--- a/api_layers/arduino_layer.py
+++ b/api_layers/arduino_layer.py
@@ -81,6 +81,18 @@ except ImportError:
_SERIAL_AVAILABLE = False
+def _dedupe_description(desc: str) -> str:
+ """pyserial on Linux often reports a USB-serial adapter's description as
+ "X - X" (same udev model string used for both halves when there's no
+ separate manufacturer/interface field — common on cheap FTDI/CH340
+ clones), which then reads as a literal duplicate everywhere this
+ description gets shown (device name, port picker). Collapse it."""
+ parts = desc.split(" - ")
+ if len(parts) == 2 and parts[0].strip() == parts[1].strip():
+ return parts[0].strip()
+ return desc
+
+
class ArduinoLayer:
DEFAULT_ANALOG_PINS = ["A0", "A1", "A2", "A3", "A4", "A5"]
@@ -552,7 +564,7 @@ class ArduinoLayer:
return []
try:
return [
- (p.device, p.description or "")
+ (p.device, _dedupe_description(p.description or ""))
for p in serial.tools.list_ports.comports()
]
except Exception as e: