diff options
Diffstat (limited to 'api_layers')
| -rw-r--r-- | api_layers/arduino_layer.py | 14 |
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: |
