diff --git a/platformio/builder/tools/pioupload.py b/platformio/builder/tools/pioupload.py index 3ea7b9fe..fecb42cc 100644 --- a/platformio/builder/tools/pioupload.py +++ b/platformio/builder/tools/pioupload.py @@ -100,9 +100,7 @@ def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument board_hwids = [] if "BOARD" in env and "build.hwids" in env.BoardConfig(): board_hwids = env.BoardConfig().get("build.hwids") - for item in util.get_serialports(): - if "VID:PID" not in item['hwid']: - continue + for item in util.get_serialports(filter_hwid=True): port = item['port'] for hwid in board_hwids: hwid_str = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") diff --git a/platformio/commands/device.py b/platformio/commands/device.py index 367be3c4..bf5499ae 100644 --- a/platformio/commands/device.py +++ b/platformio/commands/device.py @@ -100,10 +100,9 @@ def device_list(json_output): help="Diagnostics: suppress non-error messages, default=Off") def device_monitor(**kwargs): if not kwargs['port']: - for item in get_serialports(): - if "VID:PID" in item['hwid']: - kwargs['port'] = item['port'] - break + ports = get_serialports(filter_hwid=True) + if len(ports) == 1: + kwargs['port'] = ports[0]['port'] sys.argv = ["monitor"] for k, v in kwargs.iteritems(): @@ -120,10 +119,10 @@ def device_monitor(**kwargs): sys.argv.extend([k, str(v)]) try: - miniterm.main( # pylint: disable=E1123 + miniterm.main( default_port=kwargs['port'], default_baudrate=kwargs['baud'], default_rts=kwargs['rts'], default_dtr=kwargs['dtr']) - except Exception as e: # pylint: disable=W0702 + except Exception as e: raise MinitermException(e) diff --git a/platformio/util.py b/platformio/util.py index 4247132e..9663aeac 100644 --- a/platformio/util.py +++ b/platformio/util.py @@ -358,7 +358,7 @@ def copy_pythonpath_to_osenv(): os.environ['PYTHONPATH'] = os.pathsep.join(_PYTHONPATH) -def get_serialports(): +def get_serialports(filter_hwid=False): try: from serial.tools.list_ports import comports except ImportError: @@ -373,7 +373,11 @@ def get_serialports(): d = unicode(d, errors="ignore") except TypeError: pass - result.append({"port": p, "description": d, "hwid": h}) + if not filter_hwid or "VID:PID" in h: + result.append({"port": p, "description": d, "hwid": h}) + + if filter_hwid: + return result # fix for PySerial if not result and platform.system() == "Darwin":