def serialports_list(json_output): if json_output: click.echo(json.dumps(get_serialports())) return for item in get_serialports(): click.secho(item['port'], fg="cyan") click.echo("-" * len(item['port'])) click.echo("Hardware ID: %s" % item['hwid']) click.echo("Description: %s" % item['description']) click.echo("")
def serialports_list(json_output): if json_output: click.echo(json.dumps(get_serialports())) return for item in get_serialports(): click.secho(item["port"], fg="cyan") click.echo("----------") click.echo("Hardware ID: %s" % item["hwid"]) click.echo("Description: %s" % item["description"]) click.echo("")
def AutodetectUploadPort(env): if "UPLOAD_PORT" in env: return if env.subst("$FRAMEWORK") == "mbed": msdlabels = ("mbed", "nucleo", "frdm") for item in get_logicaldisks(): if (not item['name'] or not any([l in item['name'].lower() for l in msdlabels])): continue env.Replace(UPLOAD_PORT=item['disk']) break else: board_build_opts = env.get("BOARD_OPTIONS", {}).get("build", {}) for item in get_serialports(): if "VID:PID" not in item['hwid']: continue env.Replace(UPLOAD_PORT=item['port']) for hwid in board_build_opts.get("hwid", []): board_hwid = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") if board_hwid in item['hwid']: break if "UPLOAD_PORT" in env: print "Auto-detected UPLOAD_PORT/DISK: %s" % env['UPLOAD_PORT'] else: env.Exit("Error: Please specify `upload_port` for environment or use " "global `--upload-port` option.\n" "For some development platforms this can be a USB flash " "drive (i.e. /media/<user>/<device name>)\n")
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 board_type = env.subst("$BOARD") if "zero" not in board_type: env.Append( UPLOADERFLAGS=[ "-U", "true" if ("usb" in board_type.lower( ) or board_type == "digix") else "false" ]) upload_options = env.get("BOARD_OPTIONS", {}).get("upload", {}) if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports)) # use only port name for BOSSA if "/" in env.subst("$UPLOAD_PORT"): env.Replace(UPLOAD_PORT=basename(env.subst("$UPLOAD_PORT")))
def serialports_monitor(**kwargs): if not kwargs['port']: for item in get_serialports(): if "VID:PID" in item['hwid']: kwargs['port'] = item['port'] break sys.argv = ["monitor"] for k, v in kwargs.iteritems(): if k in ("port", "baud", "rts", "dtr"): continue k = "--" + k.replace("_", "-") if isinstance(v, bool): if v: sys.argv.append(k) elif isinstance(v, tuple): for i in v: sys.argv.extend([k, i]) else: sys.argv.extend([k, str(v)]) try: miniterm.main( # pylint: disable=E1123 default_port=kwargs['port'], default_baudrate=kwargs['baud'], default_rts=kwargs['rts'], default_dtr=kwargs['dtr'] ) except Exception as e: # pylint: disable=W0702 raise MinitermException(e)
def WaitForNewSerialPort(env, before): print "Waiting for the new upload port..." prev_port = env.subst("$UPLOAD_PORT") new_port = None elapsed = 0 sleep(1) while elapsed < 5 and new_port is None: now = util.get_serialports() for p in now: if p not in before: new_port = p['port'] break before = now sleep(0.25) elapsed += 0.25 if not new_port: for p in now: if prev_port == p['port']: new_port = p['port'] break if not new_port: env.Exit("Error: Couldn't find a board on the selected port. " "Check that you have the correct port selected. " "If it is correct, try pressing the board's reset " "button after initiating the upload.") return new_port
def device_monitor(**kwargs): if not kwargs['port']: ports = get_serialports(filter_hwid=True) if len(ports) == 1: kwargs['port'] = ports[0]['port'] sys.argv = ["monitor"] for k, v in kwargs.iteritems(): if k in ("port", "baud", "rts", "dtr"): continue k = "--" + k.replace("_", "-") if isinstance(v, bool): if v: sys.argv.append(k) elif isinstance(v, tuple): for i in v: sys.argv.extend([k, i]) else: sys.argv.extend([k, str(v)]) try: miniterm.main( default_port=kwargs['port'], default_baudrate=kwargs['baud'], default_rts=kwargs['rts'], default_dtr=kwargs['dtr']) except Exception as e: raise MinitermException(e)
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 def _rpi_sysgpio(path, value): with open(path, "w") as f: f.write(str(value)) upload_options = env.get("BOARD_OPTIONS", {}).get("upload", {}) if env.subst("$UPLOAD_SPEED"): env.Append(UPLOADERFLAGS=["-b", "$UPLOAD_SPEED"]) if not upload_options.get("require_upload_port", False): return env.AutodetectUploadPort() env.Append(UPLOADERFLAGS=["-P", "$UPLOAD_PORT"]) if env.subst("$BOARD") == "raspduino": _rpi_sysgpio("/sys/class/gpio/export", 18) _rpi_sysgpio("/sys/class/gpio/gpio18/direction", "out") _rpi_sysgpio("/sys/class/gpio/gpio18/value", 1) sleep(0.1) _rpi_sysgpio("/sys/class/gpio/gpio18/value", 0) _rpi_sysgpio("/sys/class/gpio/unexport", 18) else: if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = [i['port'] for i in get_serialports()] if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports))
def AutodetectUploadPort(env): if "UPLOAD_PORT" in env: return if env.subst("$FRAMEWORK") == "mbed": msdlabels = ("mbed", "nucleo", "frdm") for item in get_logicaldisks(): if (not item['name'] or not any([l in item['name'].lower() for l in msdlabels])): continue print "Auto-detected UPLOAD_PORT/DISK: %s" % item['disk'] env.Replace(UPLOAD_PORT=item['disk']) break else: for item in get_serialports(): if "VID:PID" not in item['hwid']: continue print "Auto-detected UPLOAD_PORT: %s" % item['port'] env.Replace(UPLOAD_PORT=item['port']) break if "UPLOAD_PORT" not in env: Exit("Error: Please specify `upload_port` for environment or use " "global `--upload-port` option.\n" "For the some development platforms it can be USB flash drive\n")
def serialports_list(): for item in get_serialports(): secho(item['port'], fg="cyan") echo("----------") echo("Hardware ID: %s" % item['hwid']) echo("Description: %s" % item['description']) echo("")
def _look_for_serial_port(): port = None board_hwids = env.get("BOARD_OPTIONS", {}).get( "build", {}).get("hwids", []) for item in util.get_serialports(): if "VID:PID" not in item['hwid']: continue port = item['port'] for hwid in board_hwids: hwid_str = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") if hwid_str in item['hwid']: return port return port
def serialports_monitor(**kwargs): sys.argv = sys.argv[2:] if not kwargs['port']: for item in get_serialports(): if "VID:PID" in item['hwid']: sys.argv += ["--port", item['port']] break try: miniterm.main() except Exception as e: # pylint: disable=W0702 raise PlatformioException(str(e))
def serialports_monitor(**kwargs): sys.argv = sys.argv[2:] if not kwargs['port']: for item in get_serialports(): if "VID:PID" in item['hwid']: sys.argv += ["--port", item['port']] break try: miniterm.main() except: # pylint: disable=W0702 pass
def serialports_monitor(**kwargs): sys.argv = app.get_session_var("command_ctx").args[1:] if not kwargs['port']: for item in get_serialports(): if "VID:PID" in item['hwid']: sys.argv += ["--port", item['port']] break try: miniterm.main() except Exception as e: # pylint: disable=W0702 raise MinitermException(e)
def _look_for_serial_port(): port = None 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(filter_hwid=True): if not _is_match_pattern(item['port']): continue port = item['port'] for hwid in board_hwids: hwid_str = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") if hwid_str in item['hwid']: return port return port
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 if "program" in COMMAND_LINE_TARGETS: return if "micronucleus" in env['UPLOADER']: print "Please unplug/plug device ..." upload_options = {} if "BOARD" in env: upload_options = env.BoardConfig().get("upload", {}) # Deprecated: compatibility with old projects. Use `program` instead if "usb" in env.subst("$UPLOAD_PROTOCOL"): upload_options['require_upload_port'] = False env.Replace(UPLOAD_SPEED=None) if env.subst("$UPLOAD_SPEED"): env.Append(UPLOADERFLAGS=["-b", "$UPLOAD_SPEED"]) if upload_options and not upload_options.get("require_upload_port", False): return env.AutodetectUploadPort() env.Append(UPLOADERFLAGS=["-P", '"$UPLOAD_PORT"']) if env.subst("$BOARD") in ("raspduino", "emonpi"): def _rpi_sysgpio(path, value): with open(path, "w") as f: f.write(str(value)) pin_num = 18 if env.subst("$BOARD") == "raspduino" else 4 _rpi_sysgpio("/sys/class/gpio/export", pin_num) _rpi_sysgpio("/sys/class/gpio/gpio%d/direction" % pin_num, "out") _rpi_sysgpio("/sys/class/gpio/gpio%d/value" % pin_num, 1) sleep(0.1) _rpi_sysgpio("/sys/class/gpio/gpio%d/value" % pin_num, 0) _rpi_sysgpio("/sys/class/gpio/unexport", pin_num) else: if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports))
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 upload_options = env.get("BOARD_OPTIONS", {}).get("upload", {}) if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports)) # use only port name for BOSSA if ("/" in env.subst("$UPLOAD_PORT") and env.subst("$UPLOAD_PROTOCOL") == "sam-ba"): env.Replace(UPLOAD_PORT=basename(env.subst("$UPLOAD_PORT")))
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 env.AutodetectUploadPort() upload_options = {} if "BOARD" in env: upload_options = env.BoardConfig().get("upload", {}) if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports)) if "/" in env.subst("$UPLOAD_PORT"): env.Replace(UPLOAD_PORT=basename(env.subst("$UPLOAD_PORT")))
def WaitForNewSerialPort(env, before): new_port = None elapsed = 0 while elapsed < 10: now = [i['port'] for i in get_serialports()] diff = list(set(now) - set(before)) if diff: new_port = diff[0] break before = now sleep(0.25) elapsed += 0.25 if not new_port: env.Exit("Error: Couldn't find a board on the selected port. " "Check that you have the correct port selected. " "If it is correct, try pressing the board's reset " "button after initiating the upload.") return new_port
def WaitForNewSerialPort(_, before): new_port = None elapsed = 0 while elapsed < 10: now = [i['port'] for i in get_serialports()] diff = list(set(now) - set(before)) if diff: new_port = diff[0] break before = now sleep(0.25) elapsed += 0.25 if not new_port: Exit("Error: Couldn't find a board on the selected port. " "Check that you have the correct port selected. " "If it is correct, try pressing the board's reset " "button after initiating the upload.") return new_port
def get_port(): ports = get_serialports(filter_hwid=True) to_ignore = list() for item in ports: if 'USB VID:PID=1A86:7523 LOCATION=20-13' in item[ 'hwid'] and '/dev/cu.wchusbserial14d0' in item[ 'port'] and 'USB2.0-Serial' in item['description']: sys.stderr.write('-i %s\n' % item) to_ignore.append(item) elif "VID:PID" in item['hwid']: sys.stderr.write('-> %s\n' % item) else: sys.stderr.write('%s\n' % item) # print comports() for item in to_ignore: ports.remove(item) port = None if len(ports) == 1: port = ports[0].get('port') if len(ports) > 1: port = ask_for_port() return port
def AutodetectUploadPort(env): if "UPLOAD_PORT" in env: return if env.subst("$FRAMEWORK") == "mbed": msdlabels = ("mbed", "nucleo", "frdm") for item in get_logicaldisks(): if (not item['name'] or not any([l in item['name'].lower() for l in msdlabels])): continue env.Replace(UPLOAD_PORT=item['disk']) break else: if (system() == "Linux" and not isfile("/etc/udev/99-platformio-udev.rules")): print( "\nWarning! Please install `99-platformio-udev.rules` and " "check that your board's PID and VID are listed in the rules." "\n https://raw.githubusercontent.com/platformio/platformio" "/develop/scripts/99-platformio-udev.rules\n") board_build_opts = env.get("BOARD_OPTIONS", {}).get("build", {}) for item in get_serialports(): if "VID:PID" not in item['hwid']: continue env.Replace(UPLOAD_PORT=item['port']) for hwid in board_build_opts.get("hwid", []): board_hwid = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") if board_hwid in item['hwid']: break if "UPLOAD_PORT" in env: print "Auto-detected UPLOAD_PORT/DISK: %s" % env['UPLOAD_PORT'] else: env.Exit("Error: Please specify `upload_port` for environment or use " "global `--upload-port` option.\n" "For some development platforms this can be a USB flash " "drive (i.e. /media/<user>/<device name>)\n")
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 env.AutodetectUploadPort() upload_options = {} if "BOARD" in env: upload_options = env.BoardConfig().get("upload", {}) if not bool(upload_options.get("disable_flushing", False)): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if bool(upload_options.get("use_1200bps_touch", False)): env.TouchSerialPort("$UPLOAD_PORT", 1200) if bool(upload_options.get("wait_for_upload_port", False)): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports)) # use only port name for BOSSA if ("/" in env.subst("$UPLOAD_PORT") and env.subst("$UPLOAD_PROTOCOL") == "sam-ba"): env.Replace(UPLOAD_PORT=basename(env.subst("$UPLOAD_PORT")))
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 def _rpi_sysgpio(path, value): with open(path, "w") as f: f.write(str(value)) upload_options = env.get("BOARD_OPTIONS", {}).get("upload", {}) if env.subst("$UPLOAD_SPEED"): env.Append(UPLOADERFLAGS=["-b", "$UPLOAD_SPEED"]) if "micronucleus" in env['UPLOADER']: print "Please unplug/plug device ..." if not upload_options.get("require_upload_port", False): return env.AutodetectUploadPort() env.Append(UPLOADERFLAGS=["-P", "$UPLOAD_PORT"]) if env.subst("$BOARD") == "raspduino": _rpi_sysgpio("/sys/class/gpio/export", 18) _rpi_sysgpio("/sys/class/gpio/gpio18/direction", "out") _rpi_sysgpio("/sys/class/gpio/gpio18/value", 1) sleep(0.1) _rpi_sysgpio("/sys/class/gpio/gpio18/value", 0) _rpi_sysgpio("/sys/class/gpio/unexport", 18) else: if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = [i['port'] for i in get_serialports()] if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports))
def get_test_port(self): # if test port is specified manually or in config if self.options.get("test_port"): return self.options.get("test_port") if self.env_options.get("test_port"): return self.env_options.get("test_port") assert set(["platform", "board"]) & set(self.env_options.keys()) p = PlatformFactory.newPlatform(self.env_options['platform']) board_hwids = p.board_config(self.env_options['board']).get( "build.hwids", []) port = None elapsed = 0 while elapsed < 5 and not port: for item in util.get_serialports(): port = item['port'] for hwid in board_hwids: hwid_str = ("%s:%s" % (hwid[0], hwid[1])).replace("0x", "") if hwid_str in item['hwid']: return port # check if port is already configured try: serial.Serial(port, timeout=self.SERIAL_TIMEOUT).close() except serial.SerialException: port = None if not port: sleep(0.25) elapsed += 0.25 if not port: raise exception.PlatformioException( "Please specify `test_port` for environment or use " "global `--test-port` option.") return port
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 board_type = env.subst("$BOARD") if "zero" not in board_type: env.Append(UPLOADERFLAGS=[ "-U", "true" if ("usb" in board_type.lower() or board_type == "digix") else "false" ]) upload_options = env.get("BOARD_OPTIONS", {}).get("upload", {}) if not upload_options.get("disable_flushing", False): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports)) # use only port name for BOSSA if "/" in env.subst("$UPLOAD_PORT"): env.Replace(UPLOAD_PORT=basename(env.subst("$UPLOAD_PORT")))
def WaitForNewSerialPort(env, before): print "Waiting for the new upload port..." prev_port = env.subst("$UPLOAD_PORT") new_port = None elapsed = 0 before = [p['port'] for p in before] while elapsed < 5 and new_port is None: now = [p['port'] for p in util.get_serialports()] for p in now: if p not in before: new_port = p break before = now sleep(0.25) elapsed += 0.25 if not new_port: for p in now: if prev_port == p: new_port = p break try: s = Serial(new_port) s.close() except SerialException: sleep(1) if not new_port: sys.stderr.write("Error: Couldn't find a board on the selected port. " "Check that you have the correct port selected. " "If it is correct, try pressing the board's reset " "button after initiating the upload.\n") env.Exit(1) return new_port
uploadeep = env.Alias( "uploadeep", target_eep, [lambda target, source, env: before_upload(), "$UPLOADEEPCMD"]) AlwaysBuild(uploadeep) # # Check for $UPLOAD_PORT variable # is_uptarget = (set(["upload", "uploadlazy", "uploadeep"]) & set(COMMAND_LINE_TARGETS)) if is_uptarget: # try autodetect upload port if "UPLOAD_PORT" not in env: for item in get_serialports(): if "VID:PID" in item['hwid']: print "Auto-detected UPLOAD_PORT: %s" % item['port'] env.Replace(UPLOAD_PORT=item['port']) break if "UPLOAD_PORT" not in env: Exit("Please specify environment 'upload_port' or use global " "--upload-port option.") # # Setup default targets # Default(target_hex)
def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 if "program" in COMMAND_LINE_TARGETS: return if "micronucleus" in env['UPLOADER']: print "Please unplug/plug device ..." upload_options = {} if "BOARD" in env: upload_options = env.BoardConfig().get("upload", {}) # Deprecated: compatibility with old projects. Use `program` instead if "usb" in env.subst("$UPLOAD_PROTOCOL"): upload_options['require_upload_port'] = False env.Replace(UPLOAD_SPEED=None) if env.subst("$UPLOAD_SPEED"): env.Append(UPLOADERFLAGS=["-b", "$UPLOAD_SPEED"]) # extra upload flags if "extra_flags" in upload_options: env.Append(UPLOADERFLAGS=upload_options.get("extra_flags")) # disable erasing by default env.Append(UPLOADERFLAGS=["-D"]) if upload_options and not upload_options.get("require_upload_port", False): return env.AutodetectUploadPort() env.Append(UPLOADERFLAGS=["-P", '"$UPLOAD_PORT"']) if env.subst("$BOARD") in ("raspduino", "emonpi", "sleepypi"): def _rpi_sysgpio(path, value): with open(path, "w") as f: f.write(str(value)) if env.subst("$BOARD") == "raspduino": pin_num = 18 elif env.subst("$BOARD") == "sleepypi": pin_num = 22 else: pin_num = 4 _rpi_sysgpio("/sys/class/gpio/export", pin_num) _rpi_sysgpio("/sys/class/gpio/gpio%d/direction" % pin_num, "out") _rpi_sysgpio("/sys/class/gpio/gpio%d/value" % pin_num, 1) sleep(0.1) _rpi_sysgpio("/sys/class/gpio/gpio%d/value" % pin_num, 0) _rpi_sysgpio("/sys/class/gpio/unexport", pin_num) else: if not upload_options.get("disable_flushing", False) \ and not env.get("UPLOAD_PORT", "").startswith("net:"): env.FlushSerialBuffer("$UPLOAD_PORT") before_ports = get_serialports() if upload_options.get("use_1200bps_touch", False): env.TouchSerialPort("$UPLOAD_PORT", 1200) if upload_options.get("wait_for_upload_port", False): env.Replace(UPLOAD_PORT=env.WaitForNewSerialPort(before_ports))
def _process_cmd_device_list(self, _): return (self.name, util.get_serialports())
uploadeep = env.Alias("uploadeep", target_eep, [ lambda target, source, env: reset_device(), "$UPLOADEEPCMD"]) AlwaysBuild(uploadeep) # # Check for $UPLOAD_PORT variable # is_uptarget = (set(["upload", "uploadlazy", "uploadeep"]) & set(COMMAND_LINE_TARGETS)) if is_uptarget: # try autodetect upload port if "UPLOAD_PORT" not in env: for item in get_serialports(): if "VID:PID" in item['hwid']: print "Auto-detected UPLOAD_PORT: %s" % item['port'] env['UPLOAD_PORT'] = item['port'] break if "UPLOAD_PORT" not in env: Exit("Please specify environment 'upload_port' or use global " "--upload-port option.") # # Setup default targets # Default(target_hex)