feat: 发布固件底层开发 Skill 套件
This commit is contained in:
commit
c7ae3b4ce1
72 files changed
+10212
No files matched your search
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Behavioral tests for validate_gpio_plan.py."""
|
||||
|
||||
import copy
|
||||
|
||||
import validate_gpio_plan
|
||||
|
||||
|
||||
def valid_plan() -> dict[str, object]:
|
||||
return {
|
||||
"schema_version": 1,
|
||||
"project": "CV1841CP-BOARD_dualos",
|
||||
"validation_mode": "emxres-config",
|
||||
"sources": ["schematic.pdf page 3", "GPIO List row 12"],
|
||||
"confirmation": {
|
||||
"confirmed": True,
|
||||
"confirmed_at": "2026-09-02T10:00:00+08:00",
|
||||
"summary": "用户确认整张 GPIO 实施表",
|
||||
},
|
||||
"signals": [
|
||||
{
|
||||
"function": "CAM_RST0",
|
||||
"pad": "PAD_MIPI_TXP2",
|
||||
"mux": "XGPIOC_17",
|
||||
"gpio": "C17",
|
||||
"direction": "output",
|
||||
"active_level": "low",
|
||||
"boot_value": 0,
|
||||
"runtime_owner": "camera",
|
||||
"dts_consumers": ["mipi_rx.snsr-reset"],
|
||||
"source_evidence": ["schematic.pdf page 3"],
|
||||
"decision": "confirmed",
|
||||
"note": "early reset",
|
||||
},
|
||||
{
|
||||
"function": "CAM_MCLK0",
|
||||
"pad": "PAD_MIPI_TXP0",
|
||||
"mux": "CAM_MCLK0",
|
||||
"gpio": None,
|
||||
"direction": "peripheral",
|
||||
"active_level": None,
|
||||
"boot_value": None,
|
||||
"runtime_owner": "camera",
|
||||
"dts_consumers": [],
|
||||
"source_evidence": ["schematic.pdf page 3"],
|
||||
"decision": "inherited",
|
||||
"note": "camera clock",
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
result = validate_gpio_plan.validate_plan(valid_plan())
|
||||
assert result["passed"] is True, result
|
||||
|
||||
candidate = valid_plan()
|
||||
candidate["confirmation"] = {"confirmed": False}
|
||||
candidate["signals"][0]["decision"] = "provisional"
|
||||
candidate["signals"][0]["active_level"] = "unknown"
|
||||
candidate_result = validate_gpio_plan.validate_plan(candidate, allow_unconfirmed=True)
|
||||
assert candidate_result["passed"] is True, candidate_result
|
||||
assert candidate_result["warnings"]
|
||||
assert validate_gpio_plan.validate_plan(candidate)["passed"] is False
|
||||
|
||||
duplicate = copy.deepcopy(valid_plan())
|
||||
duplicate["signals"].append(copy.deepcopy(duplicate["signals"][0]))
|
||||
duplicate["signals"][-1]["function"] = "WIFI_PWREN"
|
||||
duplicate_result = validate_gpio_plan.validate_plan(duplicate)
|
||||
assert duplicate_result["passed"] is False
|
||||
assert any("重复 Pad" in error for error in duplicate_result["errors"])
|
||||
assert any("重复 GPIO" in error for error in duplicate_result["errors"])
|
||||
|
||||
invalid_input = copy.deepcopy(valid_plan())
|
||||
invalid_input["signals"][0]["direction"] = "input"
|
||||
invalid_input["signals"][0]["boot_value"] = 1
|
||||
assert validate_gpio_plan.validate_plan(invalid_input)["passed"] is False
|
||||
print("GPIO plan behavioral tests passed")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in new issue
Block a user