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("")
示例#2
0
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("")
示例#3
0
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")
示例#4
0
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)
示例#6
0
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
示例#7
0
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)
示例#8
0
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))
示例#9
0
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")
示例#10
0
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("")
示例#11
0
 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
示例#12
0
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))
示例#13
0
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)
示例#15
0
 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
示例#16
0
文件: main.py 项目: jeditekunum/Cosa
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))
示例#17
0
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")))
示例#18
0
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")))
示例#19
0
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
示例#20
0
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
示例#21
0
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
示例#22
0
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")
示例#23
0
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")))
示例#24
0
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))
示例#25
0
    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
示例#26
0
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")))
示例#27
0
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
示例#28
0
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
示例#29
0
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)
示例#30
0
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))
示例#31
0
 def _process_cmd_device_list(self, _):
     return (self.name, util.get_serialports())
示例#32
0
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)