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
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_)
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_]
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_)
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_]
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()