mirror of
https://github.com/esphome/esphome.git
synced 2026-07-10 17:05:36 +00:00
template
This commit is contained in:
@@ -8,6 +8,8 @@ from pathlib import Path
|
||||
import re
|
||||
import sys
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
# Map arduino-pico pin defines to ESPHome-friendly names
|
||||
PIN_NAME_MAP = {
|
||||
"LED": "LED",
|
||||
@@ -123,49 +125,36 @@ def _get_variant(json_file: Path) -> str | None:
|
||||
return data.get("build", {}).get("variant")
|
||||
|
||||
|
||||
def format_pins(pins: dict[str, int] | str) -> str:
|
||||
"""Format a pin dict or alias as Python source."""
|
||||
_TEMPLATE_DIR = Path(__file__).parent
|
||||
|
||||
|
||||
def _format_pins(pins: dict[str, int] | str) -> str:
|
||||
"""Jinja2 filter to format a pin dict or alias as Python source."""
|
||||
if isinstance(pins, str):
|
||||
return f'"{pins}"'
|
||||
items = ", ".join(f'"{k}": {v}' for k, v in sorted(pins.items()))
|
||||
return repr(pins)
|
||||
items = ", ".join(f"{k!r}: {v}" for k, v in sorted(pins.items()))
|
||||
return f"{{{items}}}"
|
||||
|
||||
|
||||
_jinja_env = Environment(
|
||||
loader=FileSystemLoader(_TEMPLATE_DIR), keep_trailing_newline=True
|
||||
)
|
||||
_jinja_env.filters["format_pins"] = _format_pins
|
||||
_jinja_env.filters["repr"] = repr
|
||||
|
||||
|
||||
def generate(arduino_pico_path: Path) -> str:
|
||||
"""Generate boards.py content."""
|
||||
board_pins, boards = load_boards(arduino_pico_path)
|
||||
|
||||
lines = [
|
||||
"# Auto-generated by generate_boards.py — do not edit manually",
|
||||
"# To regenerate: python esphome/components/rp2040/generate_boards.py <arduino-pico-path>",
|
||||
"",
|
||||
f"# arduino-pico maps pins >= {CYW43_GPIO_OFFSET} to CYW43 wireless chip GPIOs",
|
||||
f"CYW43_GPIO_OFFSET = {CYW43_GPIO_OFFSET}",
|
||||
f"CYW43_MAX_GPIO = {CYW43_GPIO_OFFSET + CYW43_GPIO_COUNT - 1}",
|
||||
f"DEFAULT_MAX_PIN = {DEFAULT_MAX_PIN}",
|
||||
"",
|
||||
"RP2040_BASE_PINS = {}",
|
||||
"",
|
||||
"RP2040_BOARD_PINS = {",
|
||||
]
|
||||
|
||||
for name, pins in sorted(board_pins.items()):
|
||||
lines.append(f" {name!r}: {format_pins(pins)},")
|
||||
|
||||
lines.append("}")
|
||||
lines.append("")
|
||||
lines.append("BOARDS = {")
|
||||
|
||||
for name, info in sorted(boards.items()):
|
||||
lines.append(f" {name!r}: {{")
|
||||
for key, value in info.items():
|
||||
lines.append(f" {key!r}: {value!r},")
|
||||
lines.append(" },")
|
||||
|
||||
lines.append("}")
|
||||
lines.append("")
|
||||
|
||||
return "\n".join(lines)
|
||||
template = _jinja_env.get_template("boards.jinja2")
|
||||
return template.render(
|
||||
cyw43_gpio_offset=CYW43_GPIO_OFFSET,
|
||||
cyw43_max_gpio=CYW43_GPIO_OFFSET + CYW43_GPIO_COUNT - 1,
|
||||
default_max_pin=DEFAULT_MAX_PIN,
|
||||
board_pins=sorted(board_pins.items()),
|
||||
boards=sorted(boards.items()),
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
Reference in New Issue
Block a user