feat: 发布固件底层开发 Skill 套件

This commit is contained in:
tangfahong committed 2026-09-11 15:06:55 +08:00
commit c7ae3b4ce1
72 files changed
+10212

No files matched your search

@@ -0,0 +1,96 @@
#!/usr/bin/env python3
"""Behavioral tests for the bundled CV18 GPIO pinout catalog."""
from __future__ import annotations
import importlib.util
import tempfile
from pathlib import Path
SCRIPT = Path(__file__).with_name("query_builtin_pinout.py")
SPEC = importlib.util.spec_from_file_location("query_builtin_pinout", SCRIPT)
assert SPEC is not None and SPEC.loader is not None
MODULE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(MODULE)
def selected_id(chip: str) -> str:
return str(MODULE.select_document(chip)["id"])
def main() -> int:
expected = {
"CV1810": "cv181xc",
"CV1811C": "cv181xc",
"CV1812CPA": "cv181xc",
"CV1812HP": "cv181xh",
"CV1815JA": "cv1815j",
"CV1841CP": "cv184xc",
"CV1842CP": "cv184xc",
"CV1842HP": "cv184xh",
"CV1843HP": "cv184xh",
}
for chip, identifier in expected.items():
assert selected_id(chip) == identifier, chip
try:
MODULE.select_document("CV1801B")
except MODULE.PinoutError as exc:
assert "没有对应" in str(exc)
else:
raise AssertionError("unsupported chips must fail closed")
manifest = MODULE.load_manifest()
assert len(manifest) == 5
for document in manifest:
sheet, rows = MODULE.load_pin_rows(document["path"])
assert "管腳信息表" in sheet or "管脚信息表" in sheet
assert rows
results, unmatched = MODULE.query_rows(rows, ["SD0_CLK", "GPIOA_7"], "exact")
assert not unmatched, document["id"]
assert [item["query"] for item in results] == ["SD0_CLK", "GPIOA_7"]
gpio_matches = results[1]["matches"]
assert any(
mux.get("function") == "XGPIOA[7]"
for row in gpio_matches
for mux in row["muxes"]
)
with tempfile.TemporaryDirectory() as temporary:
project = Path(temporary) / "CV1815JA-misleading-name"
project.mkdir()
config = project / "buildEnvConfig.sh"
config.write_text("export EP_CHIP='CV1842HP'\n", encoding="utf-8")
result = MODULE.run(project, None, ["SD0_CLK"], "exact")
assert result["passed"] is True
assert result["chip"] == "CV1842HP"
assert result["pinout"]["id"] == "cv184xh"
assert result["chip_evidence"]["source"] == "project-buildEnvConfig"
config.write_text("EP_CHIP=CV1811C\nEP_CHIP=CV1841CP\n", encoding="utf-8")
try:
MODULE.project_chip(project)
except MODULE.PinoutError as exc:
assert "唯一确定" in str(exc)
else:
raise AssertionError("ambiguous EP_CHIP must fail closed")
config.write_text("EP_CHIP=$CV1841CP\n", encoding="utf-8")
try:
MODULE.project_chip(project)
except MODULE.PinoutError as exc:
assert "静态芯片名称" in str(exc)
else:
raise AssertionError("dynamic EP_CHIP must fail closed")
result = MODULE.run(None, "CV1841CP", ["NOT_A_REAL_PIN"], "exact")
assert result["passed"] is False
assert result["unmatched"] == ["NOT_A_REAL_PIN"]
print("Bundled CV18 GPIO pinout behavioral tests passed")
return 0
if __name__ == "__main__":
raise SystemExit(main())