Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 28 additions & 2 deletions mpflash/ask_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@ def _ask_select(

def ask_missing_params(
params: ParamType,
*,
ask_board: bool = True,
ask_for_port: bool = False,
) -> ParamType:
"""
Asks the user for parameters not supplied on the command line and returns updated params.
Expand All @@ -139,9 +142,10 @@ def ask_missing_params(
variant_unknown = isinstance(params, FlashParams) and params.variant == "?"
needs_serial = not multi_select and (not params.serial or "?" in params.serial)
needs_versions = params.versions == [] or "?" in params.versions
needs_board = not params.boards or "?" in params.boards or variant_unknown
needs_board = ask_board and (not params.boards or "?" in params.boards or variant_unknown)
needs_port = isinstance(params, FlashParams) and ask_for_port and (not params.ports or "?" in params.ports)

if not (needs_serial or needs_versions or needs_board):
if not (needs_serial or needs_versions or needs_board or needs_port):
return params

from rich.console import Console
Expand Down Expand Up @@ -173,6 +177,13 @@ def ask_missing_params(
else:
answers["versions"] = params.versions # type: ignore

# Port only (direct firmware mode where board selection is intentionally skipped)
if needs_port and not needs_board:
port = ask_mp_port(action=action)
if not port:
return [] # type: ignore
answers["port"] = port

# Port, board(s), and variant
if needs_board:
port, boards, variant = ask_port_board_variant(
Expand Down Expand Up @@ -507,6 +518,21 @@ def ask_serialport(
return result if result else None


def ask_mp_port(*, action: str) -> Optional[str]:
"""Ask for MicroPython port using tab-completion."""
ports = known_ports()
if not ports:
log.warning("No known ports found in database.")
return None
port_meta = _port_meta()
result = _ask_with_completion(
f"Port to {action}?",
ports,
meta=port_meta,
)
return result if result and result in ports else None


# ---------------------------------------------------------------------------
# Private helpers
# ---------------------------------------------------------------------------
Expand Down
Loading
Loading