Пример #1
0
    def get_boards(self, id_=None):

        def _append_board(board_id, manifest_path):
            config = PlatformBoardConfig(manifest_path)
            if "platform" in config and config.get("platform") != self.name:
                return
            elif ("platforms" in config and
                  self.name not in config.get("platforms")):
                return
            config.manifest['platform'] = self.name
            self._BOARDS_CACHE[board_id] = config

        bdirs = (join(util.get_home_dir(), "boards"),
                 join(self.get_dir(), "boards"))
        if id_ is None:
            for boards_dir in bdirs:
                if not isdir(boards_dir):
                    continue
                for item in sorted(os.listdir(boards_dir)):
                    _id = item[:-5]
                    if not item.endswith(".json") or _id in self._BOARDS_CACHE:
                        continue
                    _append_board(_id, join(boards_dir, item))
        else:
            if id_ not in self._BOARDS_CACHE:
                for boards_dir in bdirs:
                    if not isdir(boards_dir):
                        continue
                    manifest_path = join(boards_dir, "%s.json" % id_)
                    if not isfile(manifest_path):
                        continue
                    _append_board(id_, manifest_path)
            if id_ not in self._BOARDS_CACHE:
                raise exception.UnknownBoard(id_)
        return self._BOARDS_CACHE[id_] if id_ else self._BOARDS_CACHE
Пример #2
0
 def board_config(self, id_):
     for manifest in self.get_installed_boards():
         if manifest['id'] == id_:
             return manifest
     for manifest in self.get_registered_boards():
         if manifest['id'] == id_:
             return manifest
     raise exception.UnknownBoard(id_)
Пример #3
0
def get_boards(type_=None):
    boards = _lookup_boards()

    if type_ is None:
        return boards
    else:
        if type_ not in boards:
            raise exception.UnknownBoard(type_)
        return boards[type_]
Пример #4
0
 def board_config(self, id_, platform=None):
     for manifest in self.get_installed_boards():
         if manifest["id"] == id_ and (not platform
                                       or manifest["platform"] == platform):
             return manifest
     for manifest in self.get_registered_boards():
         if manifest["id"] == id_ and (not platform
                                       or manifest["platform"] == platform):
             return manifest
     raise exception.UnknownBoard(id_)
Пример #5
0
def get_boards(type_=None):
    boards = {}
    try:
        boards = get_boards._cache  # pylint: disable=W0212
    except AttributeError:
        bdirs = [join(get_source_dir(), "boards")]
        if isdir(join(get_home_dir(), "boards")):
            bdirs.append(join(get_home_dir(), "boards"))

        for bdir in bdirs:
            for json_file in os.listdir(bdir):
                if not json_file.endswith(".json"):
                    continue
                with open(join(bdir, json_file)) as f:
                    boards.update(json.load(f))
        get_boards._cache = boards  # pylint: disable=W0212

    if type_ is None:
        return boards
    else:
        if type_ not in boards:
            raise exception.UnknownBoard(type_)
        return boards[type_]
Пример #6
0
def cli(project_dir, board, disable_auto_uploading):

    project_file = join(project_dir, "platformio.ini")
    src_dir = join(project_dir, "src")
    lib_dir = join(project_dir, "lib")
    if all([isfile(project_file), isdir(src_dir), isdir(lib_dir)]):
        raise exception.ProjectInitialized()

    builtin_boards = set(get_boards().keys())
    if board and not set(board).issubset(builtin_boards):
        raise exception.UnknownBoard(", ".join(
            set(board).difference(builtin_boards)))

    # ask about auto-uploading
    if board and app.get_setting("enable_prompts"):
        disable_auto_uploading = not click.confirm(
            "\nWould you like to enable firmware auto-uploading when project "
            "is successfully built using `platformio run` command? \n"
            "Don't forget that you can upload firmware manually using "
            "`platformio run --target upload` command.")

    if project_dir == getcwd():
        click.secho("\nThe current working directory", fg="yellow", nl=False)
        click.secho(" %s " % project_dir, fg="cyan", nl=False)
        click.secho(
            "will be used for the new project.\n"
            "You can specify another project directory via\n"
            "`platformio init -d %PATH_TO_THE_PROJECT_DIR%` command.\n",
            fg="yellow")

    click.echo("The next files/directories will be created in %s" %
               click.style(project_dir, fg="cyan"))
    click.echo("%s - Project Configuration File. |-> PLEASE EDIT ME <-|" %
               click.style("platformio.ini", fg="cyan"))
    click.echo("%s - Put your source code here" %
               click.style("src", fg="cyan"))
    click.echo("%s - Put here project specific or 3-rd party libraries" %
               click.style("lib", fg="cyan"))

    if (not app.get_setting("enable_prompts")
            or click.confirm("Do you want to continue?")):

        for d in (src_dir, lib_dir):
            if not isdir(d):
                makedirs(d)
        if not isfile(project_file):
            copyfile(join(get_source_dir(), "projectconftpl.ini"),
                     project_file)
            if board:
                fill_project_envs(project_file, board, disable_auto_uploading)
        click.secho(
            "Project has been successfully initialized!\nUseful commands:\n"
            "`platformio run` - process/build project from the current "
            "directory\n"
            "`platformio run --target upload` or `platformio run -t upload` "
            "- upload firmware to embedded board\n"
            "`platformio run --target clean` - clean project (remove compiled "
            "files)",
            fg="green")
    else:
        raise exception.AbortedByUser()